parse_sap_odata/utils/
mod.rs

1#[cfg(feature = "parser")]
2pub mod rust_tools;
3
4use std::{collections::HashSet, str::FromStr};
5
6use check_keyword::CheckKeyword;
7use convert_case::{Case, Casing};
8use serde::{Deserialize, Deserializer};
9
10pub fn default_true() -> bool {
11    true
12}
13pub fn default_false() -> bool {
14    false
15}
16
17// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
18/// Deserialize string to Boolean
19pub fn de_str_to_bool<'de, D>(deserializer: D) -> Result<bool, D::Error>
20where
21    D: Deserializer<'de>,
22{
23    let s = String::deserialize(deserializer)?;
24    bool::from_str(&s).or_else(|_| Ok(false))
25}
26
27// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
28/// Deserialize space-delimited string to list
29pub fn de_str_to_list<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
30where
31    D: Deserializer<'de>,
32{
33    let s = String::deserialize(deserializer)?;
34    Ok(s.split(" ").map(|fmt| String::from(fmt)).collect())
35}
36
37// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
38/// Case conversion
39pub fn to_pascal_case(odata_name: &str) -> String {
40    Casing::to_case(&odata_name, Case::Pascal)
41}
42pub fn to_upper_camel_case(odata_name: &str) -> String {
43    Casing::to_case(&odata_name, Case::UpperCamel)
44}
45pub fn to_snake_case(odata_name: &str) -> String {
46    Casing::to_case(&odata_name, Case::Snake)
47}
48
49pub fn odata_name_to_rust_safe_name(odata_name: &str) -> String {
50    CheckKeyword::into_safe(to_snake_case(odata_name))
51}
52
53// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
54pub fn dedup_vec_of_string(str_vec: Vec<String>) -> Vec<String> {
55    str_vec
56        .clone()
57        .into_iter()
58        .collect::<HashSet<String>>()
59        .into_iter()
60        .collect::<Vec<String>>()
61}
62
63pub fn dedup_vec_of_u8_array(u8_vec: Vec<&[u8]>) -> Vec<&[u8]> {
64    u8_vec
65        .clone()
66        .into_iter()
67        .collect::<HashSet<&[u8]>>()
68        .into_iter()
69        .collect::<Vec<&[u8]>>()
70}