flexpiler/common/rustc/deserializer/
primitive_usize.rs

1use std::str::FromStr;
2
3use crate::common::rustc::{block as block, Format};
4use crate::{error, Error};
5use crate::error::{Trait, Context};
6use crate::parser;
7use crate::reader;
8
9
10// Proxy class
11pub struct PrimitiveUSize;
12
13
14impl crate::identity::Trait for usize {
15    fn definition() -> String {
16        return String::from("usize");
17    }
18}
19
20
21impl crate::deserializer::Trait<
22    usize,
23    crate::common::rustc::Format
24> for PrimitiveUSize {
25    fn deserialize<ReaderType>(reader_mut_ref: &mut ReaderType)
26        -> crate::deserializer::Result<usize, crate::common::rustc::deserializer::Context, crate::Error<crate::common::rustc::error::Source>>
27    where ReaderType: reader::Trait {
28        use crate::deserializer::context::Trait;
29        use crate::error::Trait as ErrorTrait;
30        use crate::error::propagation::Trait as PropagationTrait;
31        use crate::parser::Parse;
32
33        let (number_data, number_finish) = match block::Number::parse(reader_mut_ref) {
34            Err(parser_error) => {
35                let error = error::Error::gen(parser_error)
36                    .propagate(<Self as crate::deserializer::context::Trait<usize, crate::common::rustc::Format>>::context());
37                return crate::deserializer::Result::Err(error);
38            },
39            Ok(block::number::Result::NoDataFound { finish }) => {
40                return crate::deserializer::Result::NoDataFound {
41                    context: finish.into()
42                };
43            }
44            Ok(block::number::Result::DataFound { data, finish }) => {
45                (data, finish)
46            },
47        };
48
49        let data = match usize::from_str(number_data.as_str()) {
50            Err(parse_int_error) => {
51                let error = error::Error::gen(parse_int_error)
52                    .propagate(<Self as crate::deserializer::context::Trait<usize, crate::common::rustc::Format>>::context());
53                return crate::deserializer::Result::Err(error);
54            },
55            Ok(value) => value,
56        };
57        let context = number_finish.into();
58
59        return crate::deserializer::Result::DataFound {
60            data,
61            context,
62        };
63    }
64}
65
66
67impl crate::Deserialization<crate::common::rustc::Format> for usize {
68    type Deserializer = PrimitiveUSize;
69}