1#![allow(non_snake_case)]
3#![allow(non_upper_case_globals)]
4#![allow(non_camel_case_types)]
5#![allow(unused_imports)]
6#![allow(unknown_lints)]
7#![allow(clippy::all)]
8#![cfg_attr(rustfmt, rustfmt_skip)]
9
10use super::*;
11use quick_protobuf::sizeofs::*;
12use quick_protobuf::{BytesReader, MessageRead, MessageWrite, Result, Writer, WriterBackend};
13use alloc::borrow::Cow;
14use core::convert::TryFrom;
15use std::io::Write;
16use core::ops::Deref;
17use core::ops::DerefMut;
18
19#[derive(Debug, Default, PartialEq, Clone)]
20pub struct Data<'a> {
21 pub Type: mod_Data::DataType,
22 pub Data: Option<Cow<'a, [u8]>>,
23 pub filesize: Option<u64>,
24 pub blocksizes: Vec<u64>,
25 pub hashType: Option<u64>,
26 pub fanout: Option<u64>,
27 pub mode: Option<u32>,
28 pub mtime: Option<UnixTime>,
29}
30impl<'a> MessageRead<'a> for Data<'a> {
31 fn from_reader(r: &mut BytesReader, bytes: &'a [u8]) -> Result<Self> {
32 let mut msg = Self::default();
33 while !r.is_eof() {
34 match r.next_tag(bytes) {
35 Ok(8) => msg.Type = r.read_enum(bytes)?,
36 Ok(18) => msg.Data = Some(r.read_bytes(bytes).map(Cow::Borrowed)?),
37 Ok(24) => msg.filesize = Some(r.read_uint64(bytes)?),
38 Ok(32) => msg.blocksizes.push(r.read_uint64(bytes)?),
39 Ok(40) => msg.hashType = Some(r.read_uint64(bytes)?),
40 Ok(48) => msg.fanout = Some(r.read_uint64(bytes)?),
41 Ok(56) => msg.mode = Some(r.read_uint32(bytes)?),
42 Ok(66) => msg.mtime = Some(r.read_message::<UnixTime>(bytes)?),
43 Ok(t) => {
44 r.read_unknown(bytes, t)?;
45 }
46 Err(e) => return Err(e),
47 }
48 }
49 Ok(msg)
50 }
51}
52impl<'a> MessageWrite for Data<'a> {
53 fn get_size(&self) -> usize {
54 0 + 1
55 + sizeof_varint(*(&self.Type) as u64)
56 + self.Data.as_ref().map_or(0, |m| 1 + sizeof_len((m).len()))
57 + self
58 .filesize
59 .as_ref()
60 .map_or(0, |m| 1 + sizeof_varint(*(m) as u64))
61 + self
62 .blocksizes
63 .iter()
64 .map(|s| 1 + sizeof_varint(*(s) as u64))
65 .sum::<usize>()
66 + self
67 .hashType
68 .as_ref()
69 .map_or(0, |m| 1 + sizeof_varint(*(m) as u64))
70 + self
71 .fanout
72 .as_ref()
73 .map_or(0, |m| 1 + sizeof_varint(*(m) as u64))
74 + self
75 .mode
76 .as_ref()
77 .map_or(0, |m| 1 + sizeof_varint(*(m) as u64))
78 + self
79 .mtime
80 .as_ref()
81 .map_or(0, |m| 1 + sizeof_len((m).get_size()))
82 }
83 fn write_message<W: WriterBackend>(&self, w: &mut Writer<W>) -> Result<()> {
84 w.write_with_tag(8, |w| w.write_enum(*&self.Type as i32))?;
85 if let Some(ref s) = self.Data {
86 w.write_with_tag(18, |w| w.write_bytes(&**s))?;
87 }
88 if let Some(ref s) = self.filesize {
89 w.write_with_tag(24, |w| w.write_uint64(*s))?;
90 }
91 for s in &self.blocksizes {
92 w.write_with_tag(32, |w| w.write_uint64(*s))?;
93 }
94 if let Some(ref s) = self.hashType {
95 w.write_with_tag(40, |w| w.write_uint64(*s))?;
96 }
97 if let Some(ref s) = self.fanout {
98 w.write_with_tag(48, |w| w.write_uint64(*s))?;
99 }
100 if let Some(ref s) = self.mode {
101 w.write_with_tag(56, |w| w.write_uint32(*s))?;
102 }
103 if let Some(ref s) = self.mtime {
104 w.write_with_tag(66, |w| w.write_message(s))?;
105 }
106 Ok(())
107 }
108}
109pub mod mod_Data {
110 #[derive(Debug, PartialEq, Eq, Clone, Copy)]
111 pub enum DataType {
112 Raw = 0,
113 Directory = 1,
114 File = 2,
115 Metadata = 3,
116 Symlink = 4,
117 HAMTShard = 5,
118 }
119 impl Default for DataType {
120 fn default() -> Self {
121 DataType::Raw
122 }
123 }
124 impl From<i32> for DataType {
125 fn from(i: i32) -> Self {
126 match i {
127 0 => DataType::Raw,
128 1 => DataType::Directory,
129 2 => DataType::File,
130 3 => DataType::Metadata,
131 4 => DataType::Symlink,
132 5 => DataType::HAMTShard,
133 _ => Self::default(),
134 }
135 }
136 }
137 impl<'a> From<&'a str> for DataType {
138 fn from(s: &'a str) -> Self {
139 match s {
140 "Raw" => DataType::Raw,
141 "Directory" => DataType::Directory,
142 "File" => DataType::File,
143 "Metadata" => DataType::Metadata,
144 "Symlink" => DataType::Symlink,
145 "HAMTShard" => DataType::HAMTShard,
146 _ => Self::default(),
147 }
148 }
149 }
150 impl From<DataType> for i32 {
151 fn from(dt: DataType) -> Self {
152 match dt {
153 DataType::Raw => 0,
154 DataType::Directory => 1,
155 DataType::File => 2,
156 DataType::Metadata => 3,
157 DataType::Symlink => 4,
158 DataType::HAMTShard => 5,
159 }
160 }
161 }
162}
163#[derive(Debug, Default, PartialEq, Clone)]
164pub struct UnixTime {
165 pub Seconds: i64,
166 pub FractionalNanoseconds: Option<u32>,
167}
168impl<'a> MessageRead<'a> for UnixTime {
169 fn from_reader(r: &mut BytesReader, bytes: &'a [u8]) -> Result<Self> {
170 let mut msg = Self::default();
171 while !r.is_eof() {
172 match r.next_tag(bytes) {
173 Ok(8) => msg.Seconds = r.read_int64(bytes)?,
174 Ok(21) => msg.FractionalNanoseconds = Some(r.read_fixed32(bytes)?),
175 Ok(t) => {
176 r.read_unknown(bytes, t)?;
177 }
178 Err(e) => return Err(e),
179 }
180 }
181 Ok(msg)
182 }
183}
184impl MessageWrite for UnixTime {
185 fn get_size(&self) -> usize {
186 0 + 1
187 + sizeof_varint(*(&self.Seconds) as u64)
188 + self.FractionalNanoseconds.as_ref().map_or(0, |_| 1 + 4)
189 }
190 fn write_message<W: WriterBackend>(&self, w: &mut Writer<W>) -> Result<()> {
191 w.write_with_tag(8, |w| w.write_int64(*&self.Seconds))?;
192 if let Some(ref s) = self.FractionalNanoseconds {
193 w.write_with_tag(21, |w| w.write_fixed32(*s))?;
194 }
195 Ok(())
196 }
197}
198#[derive(Debug, Default, PartialEq, Clone)]
199pub struct Metadata<'a> {
200 pub MimeType: Option<Cow<'a, str>>,
201}
202impl<'a> MessageRead<'a> for Metadata<'a> {
203 fn from_reader(r: &mut BytesReader, bytes: &'a [u8]) -> Result<Self> {
204 let mut msg = Self::default();
205 while !r.is_eof() {
206 match r.next_tag(bytes) {
207 Ok(10) => msg.MimeType = Some(r.read_string(bytes).map(Cow::Borrowed)?),
208 Ok(t) => {
209 r.read_unknown(bytes, t)?;
210 }
211 Err(e) => return Err(e),
212 }
213 }
214 Ok(msg)
215 }
216}
217impl<'a> MessageWrite for Metadata<'a> {
218 fn get_size(&self) -> usize {
219 0 + self
220 .MimeType
221 .as_ref()
222 .map_or(0, |m| 1 + sizeof_len((m).len()))
223 }
224 fn write_message<W: WriterBackend>(&self, w: &mut Writer<W>) -> Result<()> {
225 if let Some(ref s) = self.MimeType {
226 w.write_with_tag(10, |w| w.write_string(&**s))?;
227 }
228 Ok(())
229 }
230}