Macro anterofit::meta_service[][src]

macro_rules! meta_service {
    (trait $metanm:ident : $($superr:tt)+ ) => { ... };
    (pub trait $metanm:ident : $($superr:tt)+ ) => { ... };
}

Create a meta-service trait which combines the listed service traits.

This can be used as a shorthand to combine several service traits in generics or trait objects, and then upcast at-will:

#[macro_use] extern crate anterofit;

use anterofit::Adapter;

service! {
    trait FooService {
        fn foo(&self) -> String {
            GET("/foo")
        }
    }
}

service! {
    trait BarService {
        fn bar(&self, param: &str) {
            POST("/bar");
            query! { "param" => param }
        }
    }
}

meta_service! { trait BazService: FooService + BarService }

fn use_baz<T: BazService>(service: &T) {
    service.foo().exec_here().unwrap();
    service.bar("Hello, world!").exec_here().unwrap();
}

fn obj_baz(service: &BazService) {
    service.foo().exec_here().unwrap();
    service.bar("Hello, world!").exec_here().unwrap();
}

// Useless adapter, just for demonstration
let adapter = Adapter::builder().build();

use_baz(&adapter);
obj_baz(&adapter);