///|
fn get_user(
args : @model.UserDirectoryGetUserArgs,
) -> @model.UserDirectoryGetUserResult raise @protocol.ProtocolError {
if args.id < 0L {
raise InvalidMessage("negative user id")
}
Success({
id: args.id,
name: "Ada",
role: None,
aliases: None,
scores: None,
flags: None,
revision: 1,
})
}
///|
fn list_users(
_ : @model.UserDirectoryListUsersArgs,
) -> @model.UserDirectoryListUsersResult raise @protocol.ProtocolError {
raise InvalidMessage("list_users is not implemented in this demo")
}
///|
fn main raise {
let wire : @rpc.RpcProtocol = Compact
let handler : @model.UserDirectoryHandler = { get_user, list_users, }
let client = @model.UserDirectoryClient::new(wire, bytes => {
handler.serve_once(wire, bytes)
})
match client.get_user({ id: 7L, }) {
Success(user) => println("get_user(7) -> \{user.name}")
Missing(missing) => println("missing user \{missing.id}")
}
let framed_client = @model.UserDirectoryClient::new(wire, payload => {
let framed_request = @rpc.encode_frame(payload)
let request = @rpc.decode_frame(framed_request)
let response = handler.serve_once(wire, request)
@rpc.decode_frame(@rpc.encode_frame(response))
})
match framed_client.get_user({ id: 7L, }) {
Success(user) => println("framed get_user(7) -> \{user.name}")
Missing(missing) => println("missing user \{missing.id}")
}
}