-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmod.rs
55 lines (49 loc) · 1.32 KB
/
mod.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use crate::mammal::MammalService;
use demo_walker::WalkerService;
use sails_rs::prelude::*;
#[derive(Encode, TypeInfo)]
#[codec(crate = sails_rs::scale_codec)]
#[scale_info(crate = sails_rs::scale_info)]
enum DogEvents {
Barked,
}
pub struct DogService {
walker: WalkerService,
mammal: MammalService,
}
impl DogService {
pub fn new(walker: WalkerService) -> Self {
Self {
walker,
mammal: MammalService::new(42),
}
}
}
// Implementing `AsRef` for each of the extended services
impl AsRef<WalkerService> for DogService {
fn as_ref(&self) -> &WalkerService {
&self.walker
}
}
// Implementing `AsRef` for each of the extended services
impl AsRef<MammalService> for DogService {
fn as_ref(&self) -> &MammalService {
&self.mammal
}
}
// The resulting Dog service will have 4 methods:
// - MakeSound (from DogService)
// - Walk (from WalkerService)
// - AvgWeight (from MammalService)
// - Position (from WalkerService)
// and 2 events:
// - Barked (from DogEvents)
// - Walked (from WalkerEvents)
// See [IDL](/examples/demo/wasm/demo.idl)
#[service(extends = [MammalService, WalkerService], events = DogEvents)]
impl DogService {
pub fn make_sound(&mut self) -> &'static str {
self.notify_on(DogEvents::Barked).unwrap();
"Woof! Woof!"
}
}