parse_sap_odata/utils/
mod.rs1#[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
17pub 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
27pub 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
37pub 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
53pub 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}