118 lines
3.3 KiB
Rust
118 lines
3.3 KiB
Rust
use proc_macro::TokenStream;
|
|
use std::convert::TryFrom;
|
|
|
|
use quote::quote;
|
|
use ruma_identifiers::{
|
|
DeviceKeyId, EventId, RoomAliasId, RoomId, RoomVersionId, ServerKeyId, ServerName, UserId,
|
|
};
|
|
use syn::{parse_macro_input, LitStr};
|
|
|
|
#[proc_macro]
|
|
pub fn device_id(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
let output = quote! {
|
|
::std::boxed::Box<::ruma::identifiers::DeviceId>::from(#id)
|
|
};
|
|
|
|
output.into()
|
|
}
|
|
|
|
// w/o macro: UserId::try_from("@user:example.org").unwrap()
|
|
// w/ macro: user_id!("@user:example.org")
|
|
|
|
#[proc_macro]
|
|
pub fn device_key_id(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
assert!(DeviceKeyId::try_from(id.value()).is_ok(), "Invalid device key id");
|
|
|
|
let output = quote! {
|
|
<::ruma::identifiers::DeviceKeyId as ::std::convert::TryFrom<&str>>::try_from(#id).unwrap()
|
|
};
|
|
|
|
output.into()
|
|
}
|
|
|
|
#[proc_macro]
|
|
pub fn event_id(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
assert!(EventId::try_from(id.value()).is_ok(), "Invalid event id");
|
|
|
|
let output = quote! {
|
|
<::ruma::identifiers::EventId as ::std::convert::TryFrom<&str>>::try_from(#id).unwrap()
|
|
};
|
|
|
|
output.into()
|
|
}
|
|
|
|
#[proc_macro]
|
|
pub fn room_alias_id(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
assert!(RoomAliasId::try_from(id.value()).is_ok(), "Invalid room_alias_id");
|
|
|
|
let output = quote! {
|
|
<::ruma::identifiers::RoomAliasId as ::std::convert::TryFrom<&str>>::try_from(#id).unwrap()
|
|
};
|
|
|
|
output.into()
|
|
}
|
|
|
|
#[proc_macro]
|
|
pub fn room_id(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
assert!(RoomId::try_from(id.value()).is_ok(), "Invalid room_id");
|
|
|
|
let output = quote! {
|
|
<::ruma::identifiers::RoomId as ::std::convert::TryFrom<&str>>::try_from(#id).unwrap()
|
|
};
|
|
|
|
output.into()
|
|
}
|
|
|
|
#[proc_macro]
|
|
pub fn room_version_id(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
assert!(RoomVersionId::try_from(id.value()).is_ok(), "Invalid room_version_id");
|
|
|
|
let output = quote! {
|
|
<::ruma::identifiers::RoomVersionId as ::std::convert::TryFrom<&str>>::try_from(#id).unwrap()
|
|
};
|
|
|
|
output.into()
|
|
}
|
|
|
|
#[proc_macro]
|
|
pub fn server_key_id(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
assert!(ServerKeyId::try_from(id.value()).is_ok(), "Invalid server_key_id");
|
|
|
|
let output = quote! {
|
|
<::ruma::identifiers::ServerKeyId as ::std::convert::TryFrom<&str>>::try_from(#id).unwrap()
|
|
};
|
|
|
|
output.into()
|
|
}
|
|
|
|
#[proc_macro]
|
|
pub fn server_name(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
assert!(<&ServerName>::try_from(id.value().as_str()).is_ok(), "Invalid server_name");
|
|
|
|
let output = quote! {
|
|
<::std::boxed::Box::<::ruma::identifiers::ServerName> as ::std::convert::TryFrom<&str>>::try_from(#id).unwrap()
|
|
};
|
|
|
|
output.into()
|
|
}
|
|
|
|
#[proc_macro]
|
|
pub fn user_id(input: TokenStream) -> TokenStream {
|
|
let id = parse_macro_input!(input as LitStr);
|
|
assert!(UserId::try_from(id.value()).is_ok(), "Invalid user_id");
|
|
|
|
let output = quote! {
|
|
<::ruma::identifiers::UserId as ::std::convert::TryFrom<&str>>::try_from(#id).unwrap()
|
|
};
|
|
|
|
output.into()
|
|
}
|