aldrin_core/impls/
string.rs

1#[cfg(feature = "introspection")]
2use crate::introspection::{ir, Introspectable, LexicalId, References};
3use crate::tags::{self, PrimaryTag};
4use crate::{Deserialize, DeserializeError, Deserializer, Serialize, SerializeError, Serializer};
5
6impl PrimaryTag for String {
7    type Tag = tags::String;
8}
9
10impl Serialize<tags::String> for String {
11    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
12        serializer.serialize(&self)
13    }
14}
15
16impl Serialize<tags::String> for &String {
17    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
18        serializer.serialize_string(self)
19    }
20}
21
22impl Deserialize<tags::String> for String {
23    fn deserialize(deserializer: Deserializer) -> Result<Self, DeserializeError> {
24        deserializer.deserialize_string()
25    }
26}
27
28#[cfg(feature = "introspection")]
29impl Introspectable for String {
30    fn layout() -> ir::LayoutIr {
31        ir::BuiltInTypeIr::String.into()
32    }
33
34    fn lexical_id() -> LexicalId {
35        LexicalId::STRING
36    }
37
38    fn add_references(_references: &mut References) {}
39}
40
41impl PrimaryTag for str {
42    type Tag = tags::String;
43}
44
45impl Serialize<tags::String> for &str {
46    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
47        serializer.serialize_string(self)
48    }
49}
50
51#[cfg(feature = "introspection")]
52impl Introspectable for str {
53    fn layout() -> ir::LayoutIr {
54        ir::BuiltInTypeIr::String.into()
55    }
56
57    fn lexical_id() -> LexicalId {
58        LexicalId::STRING
59    }
60
61    fn add_references(_references: &mut References) {}
62}