pub static LINE_FEED: &[u8] = &[0x0a];
pub static SPACE: &[u8] = &[0x20];
pub static DOUBLE_QUOTE: &[u8] = &[0x22];
pub static OPEN_PAREN: &[u8] = &[0x28];
pub static CLOSE_PAREN: &[u8] = &[0x29];
pub static COMMA: &[u8] = &[0x2C];
pub static COLON: &[u8] = &[0x3A];
pub static OPEN_ANGLE: &[u8] = &[0x3C];
pub static CLOSE_ANGLE: &[u8] = &[0x3E];
pub static OPEN_SQR: &[u8] = &[0x5B];
pub static BACK_SLASH: &[u8] = &[0x5C];
pub static CLOSE_SQR: &[u8] = &[0x5D];
pub static OPEN_CURLY: &[u8] = &[0x7B];
pub static CLOSE_CURLY: &[u8] = &[0x7D];
pub static COMMMENT_LINE: &[u8] = "// ".as_bytes();
pub static SEPARATOR: &[u8] =
"// -----------------------------------------------------------------------------".as_bytes();
pub static COLON2: &[u8] = &[0x3A, 0x3A];
pub static FAT_ARROW: &[u8] = &[0x3D, 0x3E];
pub static BOOLEAN: &[u8] = "bool".as_bytes();
pub static F32: &[u8] = "f32".as_bytes();
pub static F64: &[u8] = "f64".as_bytes();
pub static I8: &[u8] = "i8".as_bytes();
pub static I16: &[u8] = "i16".as_bytes();
pub static I32: &[u8] = "i32".as_bytes();
pub static I64: &[u8] = "i64".as_bytes();
pub static U8: &[u8] = "u8".as_bytes();
pub static UNIT: &[u8] = "()".as_bytes();
pub static STRING: &[u8] = "String".as_bytes();
pub static VECTOR_U8: &[u8] = "Vec<u8>".as_bytes();
pub static OPTION: &[u8] = "Option".as_bytes();
pub static PUBLIC: &[u8] = "pub".as_bytes();
pub static START_ENUM: &[u8] = "pub enum ".as_bytes();
pub static START_IMPL: &[u8] = "impl ".as_bytes();
pub static ENTITY_TYPE_FOR: &[u8] = " EntityType for ".as_bytes();
pub static MOD_START: &[u8] = "mod ".as_bytes();
pub static DECIMAL: &[u8] = "f64".as_bytes();
pub static NAIVE_DATE_TIME: &[u8] = "chrono::NaiveDateTime".as_bytes();
pub static STD_TIME_SYSTEMTIME: &[u8] = "std::time::SystemTime".as_bytes();
pub static UUID: &[u8] = "uuid::Uuid".as_bytes();
pub static FN_VALUE_DECL: &[u8] = "pub const fn value(&self) -> &'static str {".as_bytes();
pub static FN_ITERATOR_DECL_START: &[u8] = "pub fn iterator() -> impl Iterator<Item = ".as_bytes();
pub static FN_ITERATOR_DECL_END: &[u8] = "> {".as_bytes();
pub static MATCH_SELF: &[u8] = "match *self {".as_bytes();
pub static CALL_ITER: &[u8] = ".iter()".as_bytes();
pub static CALL_COPIED: &[u8] = ".copied()".as_bytes();
pub static AS_OPT_LIST_START: &[u8] = "
pub fn as_list() -> Vec<&'static str> {
let mut list = "
.as_bytes();
pub static AS_OPT_LIST_END: &[u8] = "::iterator().fold(Vec::new(), |mut acc: Vec<&'static str>, es| {
acc.insert(0, &mut es.value());
acc
});
list.reverse();
list
}
"
.as_bytes();
pub static START_PUB_STRUCT: &[u8] = &"pub struct ".as_bytes();
pub fn impl_from_str_for(struct_name: &str) -> Vec<u8> {
static FN_START: &[u8] = "
impl std::str::FromStr for "
.as_bytes();
static FN_END: &[u8] = " {
type Err = quick_xml::DeError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
quick_xml::de::from_str(s)
}
}
"
.as_bytes();
[FN_START, struct_name.as_bytes(), FN_END].concat()
}
pub static MARKER_TRAIT_ENTITY_TYPE: &[u8] = "trait EntityType {}".as_bytes();
pub static RUSTC_ALLOW_DEAD_CODE: &[u8] = "#[allow(dead_code)]".as_bytes();
pub enum DeriveTraits {
CLONE,
COPY,
DEBUG,
DEFAULT,
DESERIALIZE,
EQ,
HASH,
ITERATOR,
ORD,
PARTIALEQ,
PARTIALORD,
SERIALIZE,
}
impl DeriveTraits {
pub const fn value(&self) -> &'static str {
match *self {
DeriveTraits::CLONE => "Clone",
DeriveTraits::COPY => "Copy",
DeriveTraits::DEBUG => "Debug",
DeriveTraits::DEFAULT => "Default",
DeriveTraits::DESERIALIZE => "Deserialize",
DeriveTraits::EQ => "Eq",
DeriveTraits::HASH => "Hash",
DeriveTraits::ITERATOR => "Iterator",
DeriveTraits::ORD => "Ord",
DeriveTraits::PARTIALEQ => "PartialEq",
DeriveTraits::PARTIALORD => "PartialOrd",
DeriveTraits::SERIALIZE => "Serialize",
}
}
}
pub fn derive_str(traits: Vec<DeriveTraits>) -> Vec<u8> {
let mut d_str = Vec::new();
d_str.extend_from_slice(DERIVE_START);
for (idx, d) in traits.iter().enumerate() {
d_str.extend_from_slice(d.value().as_bytes());
if idx < traits.len() - 1 {
d_str.extend([COMMA, SPACE].concat());
}
}
d_str.extend([DERIVE_END, LINE_FEED].concat());
d_str
}
pub static DERIVE_START: &[u8] = "#[derive(".as_bytes();
pub static DERIVE_END: &[u8] = ")]".as_bytes();
pub static USE_SERDE: &[u8] = "use serde::{Deserialize, Serialize};".as_bytes();
pub static SERDE_RENAME_PASCAL_CASE: &[u8] = "#[serde(rename_all = \"PascalCase\")]".as_bytes();
pub static SERDE_RENAME_SNAKE_CASE: &[u8] = "#[serde(rename_all = \"snake_case\")]".as_bytes();
pub static SERDE_RENAME: &[u8] = "#[serde(rename = \"".as_bytes();
pub static SERDE_DE_DATETIME_OPT: &str = "parse_sap_atom_feed::deserializers::de_date_to_optional_naive_date_time";
pub static SERDE_DE_DATETIME: &str = "parse_sap_atom_feed::deserializers::de_date_to_naive_date_time";
pub fn deserialize_with(de: &'static str) -> Vec<u8> {
String::from_utf8(
[
"#[serde(deserialize_with = \"".as_bytes(),
de.as_bytes(),
DOUBLE_QUOTE,
CLOSE_PAREN,
CLOSE_SQR,
LINE_FEED,
]
.concat(),
)
.unwrap()
.into()
}
pub fn comment_for(something: &str) -> Vec<u8> {
[
SEPARATOR,
LINE_FEED,
COMMMENT_LINE,
something.as_bytes(),
LINE_FEED,
SEPARATOR,
LINE_FEED,
]
.concat()
}
pub fn start_struct(struct_name: &str) -> Vec<u8> {
[START_PUB_STRUCT, SPACE, struct_name.as_bytes(), OPEN_CURLY, LINE_FEED].concat()
}
pub fn end_struct() -> Vec<u8> {
[CLOSE_CURLY, LINE_FEED, LINE_FEED].concat()
}
pub fn impl_marker_trait(struct_name: &str) -> Vec<u8> {
[
START_IMPL,
ENTITY_TYPE_FOR,
struct_name.as_bytes(),
OPEN_CURLY,
CLOSE_CURLY,
LINE_FEED,
LINE_FEED,
]
.concat()
}