Skip to content

Commit 289ddf1

Browse files
committed
glib: Add GStr for borrowing GStrings
1 parent 95a43a2 commit 289ddf1

File tree

3 files changed

+439
-8
lines changed

3 files changed

+439
-8
lines changed

glib-macros/src/lib.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,3 +803,20 @@ pub fn variant_derive(input: TokenStream) -> TokenStream {
803803
let input = parse_macro_input!(input as DeriveInput);
804804
variant_derive::impl_variant(input)
805805
}
806+
807+
#[proc_macro]
808+
pub fn cstr_bytes(item: TokenStream) -> TokenStream {
809+
syn::parse::Parser::parse2(
810+
|stream: syn::parse::ParseStream<'_>| {
811+
let literal = stream.parse::<syn::LitStr>()?;
812+
stream.parse::<syn::parse::Nothing>()?;
813+
let bytes = std::ffi::CString::new(literal.value())
814+
.map_err(|e| syn::Error::new_spanned(&literal, format!("{}", e)))?
815+
.into_bytes_with_nul();
816+
let bytes = proc_macro2::Literal::byte_string(&bytes);
817+
Ok(quote::quote! { #bytes }.into())
818+
},
819+
item.into(),
820+
)
821+
.unwrap_or_else(|e| e.into_compile_error().into())
822+
}

0 commit comments

Comments
 (0)