pub struct MacroResult {
pub runtime_patches: Vec<Patch>,
pub type_patches: Vec<Patch>,
pub diagnostics: Vec<Diagnostic>,
pub tokens: Option<String>,
pub debug: Option<String>,
}Expand description
The result returned by a macro function.
MacroResult is the standard return type for all macro functions.
It contains patches to apply to the code, diagnostic messages,
and optional debug information.
§Patch Separation
Patches are separated into two categories:
runtime_patches: Applied to the.js/.tsruntime codetype_patches: Applied to.d.tstype declaration files
This separation allows macros to generate different code for runtime and type-checking contexts.
§Example
use macroforge_ts_syn::{MacroResult, Patch, Diagnostic, DiagnosticLevel};
fn my_macro() -> MacroResult {
// Success with patches
MacroResult {
runtime_patches: vec![/* ... */],
type_patches: vec![],
diagnostics: vec![],
tokens: None,
debug: Some("Generated 2 methods".to_string()),
}
}
fn my_macro_error() -> MacroResult {
// Error result
MacroResult {
diagnostics: vec![Diagnostic {
level: DiagnosticLevel::Error,
message: "Invalid input".to_string(),
span: None,
notes: vec![],
help: Some("Try using @derive(Debug) instead".to_string()),
}],
..Default::default()
}
}Fields§
§runtime_patches: Vec<Patch>Patches to apply to the runtime JS/TS code.
type_patches: Vec<Patch>Patches to apply to the .d.ts type declarations.
diagnostics: Vec<Diagnostic>Diagnostic messages (errors, warnings, info). If any error diagnostics are present, the macro expansion is considered failed.
tokens: Option<String>Optional raw token stream (source code) returned by the macro. Used for macros that generate complete output rather than patches.
debug: Option<String>Optional debug information for development. Can be displayed in verbose mode or logged for debugging.
Trait Implementations§
Source§impl Clone for MacroResult
impl Clone for MacroResult
Source§fn clone(&self) -> MacroResult
fn clone(&self) -> MacroResult
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MacroResult
impl Debug for MacroResult
Source§impl Default for MacroResult
impl Default for MacroResult
Source§fn default() -> MacroResult
fn default() -> MacroResult
Source§impl<'de> Deserialize<'de> for MacroResult
impl<'de> Deserialize<'de> for MacroResult
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<MacroResult, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<MacroResult, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl From<MacroforgeError> for MacroResult
impl From<MacroforgeError> for MacroResult
Source§fn from(err: MacroforgeError) -> MacroResult
fn from(err: MacroforgeError) -> MacroResult
Source§impl From<MacroforgeErrors> for MacroResult
impl From<MacroforgeErrors> for MacroResult
Source§fn from(err: MacroforgeErrors) -> MacroResult
fn from(err: MacroforgeErrors) -> MacroResult
Source§impl Serialize for MacroResult
impl Serialize for MacroResult
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for MacroResult
impl RefUnwindSafe for MacroResult
impl Send for MacroResult
impl Sync for MacroResult
impl Unpin for MacroResult
impl UnwindSafe for MacroResult
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)Source§impl<T> ImplicitClone for Twhere
T: Clone,
impl<T> ImplicitClone for Twhere
T: Clone,
fn clone_quote_var(&self) -> Self
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more