nemicosm/hidl/src/spec.rs

88 lines
3.0 KiB
Rust

use crate::*;
// TODO: Use autodefault when https://github.com/Lucretiel/autodefault/issues/4
// is fixed
pub fn spec() -> IDL {
IDL {
name: "hypercosm".to_owned(),
root: Module {
interfaces: vec![
Interface {
name: "object".to_owned(),
version: (1, 0, 0), // TODO: Change
methods: vec![
Method {
name: "listInterfaces".to_owned(),
args: vec![],
ret: ty::array(ty::string()),
},
Method {
name: "release".to_owned(),
..default()
},
],
..default()
},
Interface {
name: "root".to_owned(),
version: (0, 1, 0),
methods: vec![
Method {
name: "listExtensions".to_owned(),
ret: ty::array(ty::string()),
..default()
},
Method {
name: "ping".to_owned(),
..default()
},
Method {
name: "getObjectById".to_owned(),
ret: ty::object(),
args: vec![("id".to_owned(), ty::uuid())],
},
Method {
name: "getObjectByName".to_owned(),
ret: ty::object(),
args: vec![("name".to_owned(), ty::string())],
},
],
..default()
},
],
..default()
},
extenstions: vec![Extension {
name: "assetdelivery".to_owned(),
version: (0, 1, 0),
module: Module {
interfaces: vec![Interface {
name: "assetdelivery".to_owned(),
version: (0, 1, 0),
events: vec![Method {
name: "loadAssets".to_owned(),
args: vec![("name".to_owned(), ty::string())],
..default()
}],
..default()
}],
types: vec![CustomType {
name: "asset".to_owned(),
kind: CustomTypeKind::Struct(CustomStruct {
fields: vec![
("id".to_owned(), ty::uuid()),
("name".to_owned(), ty::string()),
("data".to_owned(), ty::array(ty::u8())),
],
}),
}],
},
}],
}
}
fn default<D: Default>() -> D {
Default::default()
}