tars_stream/
tars_trait.rs1use bytes::Bytes;
2use errors::{DecodeErr, EncodeErr};
3use std::collections::BTreeMap;
4use tars_decoder::TarsDecoder;
5use tars_encoder::TarsEncoder;
6
7pub trait StructFromTars {
9 fn _decode_from(decoder: &mut TarsDecoder) -> Result<Self, DecodeErr>
10 where
11 Self: Sized;
12}
13
14pub trait StructToTars {
16 fn _encode_to(&self, encoder: &mut TarsEncoder) -> Result<(), EncodeErr>;
17}
18
19pub trait EnumFromI32 {
21 fn _from_i32(ele: i32) -> Result<Self, DecodeErr>
22 where
23 Self: Sized;
24}
25
26pub trait EnumToI32 {
28 fn _to_i32(&self) -> i32;
29}
30
31pub trait ClassName {
33 fn _class_name() -> String;
34}
35
36impl ClassName for bool {
37 fn _class_name() -> String {
38 String::from("bool")
39 }
40}
41
42impl ClassName for i8 {
43 fn _class_name() -> String {
44 String::from("char")
45 }
46}
47
48impl ClassName for i16 {
49 fn _class_name() -> String {
50 String::from("short")
51 }
52}
53
54impl ClassName for i32 {
55 fn _class_name() -> String {
56 String::from("int32")
57 }
58}
59
60impl ClassName for i64 {
61 fn _class_name() -> String {
62 String::from("int64")
63 }
64}
65
66impl ClassName for u8 {
67 fn _class_name() -> String {
68 String::from("short")
69 }
70}
71
72impl ClassName for u16 {
73 fn _class_name() -> String {
74 String::from("int32")
75 }
76}
77
78impl ClassName for u32 {
79 fn _class_name() -> String {
80 String::from("int64")
81 }
82}
83
84impl ClassName for f32 {
85 fn _class_name() -> String {
86 String::from("float")
87 }
88}
89
90impl ClassName for f64 {
91 fn _class_name() -> String {
92 String::from("double")
93 }
94}
95
96impl ClassName for String {
97 fn _class_name() -> String {
98 String::from("string")
99 }
100}
101
102impl<K, V> ClassName for BTreeMap<K, V>
103where
104 K: ClassName + Ord,
105 V: ClassName,
106{
107 fn _class_name() -> String {
108 String::from("map<")
109 + &K::_class_name()
110 + &String::from(",")
111 + &V::_class_name()
112 + &String::from(">")
113 }
114}
115
116impl<T> ClassName for Vec<T>
117where
118 T: ClassName,
119{
120 fn _class_name() -> String {
121 String::from("List<") + &T::_class_name() + &String::from(">")
123 }
124}
125
126impl ClassName for Bytes {
127 fn _class_name() -> String {
128 String::from("list<byte>")
129 }
130}