diff --git a/Cargo.lock b/Cargo.lock index 3058906..6938a85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -796,7 +796,7 @@ dependencies = [ [[package]] name = "msg_tool" -version = "0.1.3" +version = "0.1.4" dependencies = [ "anyhow", "byteorder", @@ -835,9 +835,9 @@ dependencies = [ [[package]] name = "msg_tool_macro" -version = "0.1.0" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5977a64deff9e0d3a55e15533e8b35ee28dcb3699bbcf74c08fd0064f62a2afe" +checksum = "6d158bb2f378cef024c47e4d0b3a627536ad8615b6237b93684ad05a10404b00" dependencies = [ "quote", "syn", diff --git a/Cargo.toml b/Cargo.toml index 19fdbd4..4e3ceb5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "msg_tool" -version = "0.1.3" +version = "0.1.4" edition = "2024" repository = "https://github.com/lifegpc/msg-tool" description = "A command-line tool for exporting, importing, packing, and unpacking script files." @@ -26,7 +26,7 @@ markup5ever = { version = "0.35", optional = true } markup5ever_rcdom = { version = "0.35", optional = true } memchr = { version = "2.7", optional = true } mozjpeg = { version = "0.10", optional = true } -msg_tool_macro = { version = "0.1.0" } +msg_tool_macro = { version = "0.1.4" } overf = "0.1" png = { version = "0.17", optional = true } rand = { version = "0.9", optional = true } diff --git a/msg_tool_macro/Cargo.toml b/msg_tool_macro/Cargo.toml index 405fdb3..6428ff9 100644 --- a/msg_tool_macro/Cargo.toml +++ b/msg_tool_macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "msg_tool_macro" -version = "0.1.0" +version = "0.1.4" edition = "2024" repository = "https://github.com/lifegpc/msg-tool" description = "A procedural macro for the msg-tool project." @@ -15,3 +15,6 @@ artemis-arc = [] [dependencies] syn = { version = "2", features = ["full"] } quote = "1" + +[package.metadata.docs.rs] +all-features = true diff --git a/msg_tool_macro/src/lib.rs b/msg_tool_macro/src/lib.rs index 6e27279..b0d01a4 100644 --- a/msg_tool_macro/src/lib.rs +++ b/msg_tool_macro/src/lib.rs @@ -1,3 +1,4 @@ +#![feature(doc_auto_cfg)] use proc_macro::TokenStream; use syn::parse::discouraged::Speculative; use syn::spanned::Spanned; @@ -197,10 +198,10 @@ pub fn struct_pack_derive(input: TokenStream) -> TokenStream { } }); } else if let Some(pstring_type) = pstring_type { - let write_fn = syn::Ident::new(format!("write_{}", pstring_type).as_str(), pstring_type.span()); cur = Some(quote::quote! { let encoded = crate::utils::encoding::encode_string(encoding, &self.#field_name, true)?; - writer.#write_fn(encoded.len() as #pstring_type)?; + let len = encoded.len() as #pstring_type; + len.pack(writer, big, encoding)?; writer.write_all(&encoded)?; }); } @@ -218,10 +219,9 @@ pub fn struct_pack_derive(input: TokenStream) -> TokenStream { } }); } else if let Some(pvec_type) = pvec_type { - let write_fn = syn::Ident::new(format!("write_{}", pvec_type).as_str(), pvec_type.span()); cur = Some(quote::quote! { let len = self.#field_name.len() as #pvec_type; - writer.#write_fn(len)?; + len.pack(writer, big, encoding)?; for item in &self.#field_name { item.pack(writer, big, encoding)?; } @@ -381,10 +381,10 @@ pub fn struct_pack_derive(input: TokenStream) -> TokenStream { } }); } else if let Some(pstring_type) = pstring_type { - let write_fn = syn::Ident::new(format!("write_{}", pstring_type).as_str(), pstring_type.span()); cur = Some(quote::quote! { let encoded = crate::utils::encoding::encode_string(encoding, &#field_name, true)?; - writer.#write_fn(encoded.len() as #pstring_type)?; + let len = encoded.len() as #pstring_type; + len.pack(writer, big, encoding)?; writer.write_all(&encoded)?; }); } @@ -402,10 +402,9 @@ pub fn struct_pack_derive(input: TokenStream) -> TokenStream { } }); } else if let Some(pvec_type) = pvec_type { - let write_fn = syn::Ident::new(format!("write_{}", pvec_type).as_str(), pvec_type.span()); cur = Some(quote::quote! { let len = #field_name.len() as #pvec_type; - writer.#write_fn(len)?; + len.pack(writer, big, encoding)?; for item in &#field_name { item.pack(writer, big, encoding)?; } @@ -587,9 +586,8 @@ pub fn struct_unpack_derive(input: TokenStream) -> TokenStream { let #field_name = reader.read_fstring(#fixed_string, encoding, #trim)?; }); } else if let Some(pstring_type) = pstring_type { - let read_fn = syn::Ident::new(format!("read_{}", pstring_type).as_str(), pstring_type.span()); cur = Some(quote::quote! { - let len = reader.#read_fn()? as usize; + let len = <#pstring_type>::unpack(&mut reader, big, encoding)? as usize; let #field_name = reader.read_exact_vec(len)?; let #field_name = crate::utils::encoding::decode_to_string(encoding, &#field_name, true)?; }); @@ -603,9 +601,8 @@ pub fn struct_unpack_derive(input: TokenStream) -> TokenStream { let #field_name = reader.read_struct_vec(#fixed_vec, big, encoding)?; }); } else if let Some(pvec_type) = pvec_type { - let read_fn = syn::Ident::new(format!("read_{}", pvec_type).as_str(), pvec_type.span()); cur = Some(quote::quote! { - let len = reader.#read_fn()? as usize; + let len = <#pvec_type>::unpack(&mut reader, big, encoding)? as usize; let #field_name = reader.read_struct_vec(len, big, encoding)?; }); } diff --git a/src/lib.rs b/src/lib.rs index 9465702..453d1a2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,7 @@ //! A Rust library for exporting, importing, packing, and unpacking script files. //! //! For more information, please visit the [GitHub repository](https://github.com/lifegpc/msg-tool). +#![feature(doc_auto_cfg)] pub mod ext; pub mod format; pub mod output_scripts;