[−][src]Crate serde_detach
Nudges Serde to deserialise into fully owned ('static
) instances where this is possible.
This is primarily useful when you have a structure that can optionally borrow the input (Think [Cow<str>
] or [Cow<[u8]>
].), but a deserialiser that requires [DeserializeOwned
] (which unfortunately seems to be common).
Deserialising borrow-only types (like plain references) naturally leads to a runtime error with this method.
Example
Given:
use { serde_detach::detach, serde_object::Object, serde_taml::de::from_str, }; let input = "key: \"value\"".to_string();
This does not compile, since [Object
] tries to borrow from the input:
ⓘThis example deliberately fails to compile
let object: Object<'static> = from_str(&input, &mut ())?; // --------------- ^^^^^^ borrowed value does not live long enough // | // type annotation requires that `input` is borrowed for `'static`
This works:
let object: Object<'static> = from_str(&input, &mut ()).map(detach)?;
Structs
Deserializer | A [ |
Detach | A |
Functions
detach | Gently nudges the compiler into deserialising as [ |