Skip to content

Commit dfc57b8

Browse files
use-anyhow (#121)
Signed-off-by: n4n5 <[email protected]>
1 parent e536648 commit dfc57b8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+480
-583
lines changed

asn-compiler/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ docx-rs = { version = "0.4.5" , optional = true }
2525
regex = { version = "1.6.0" }
2626
log = { version = "0.4" }
2727
env_logger = { version = "0.10" }
28+
anyhow = "1.0.86"
2829

2930
[features]
3031
rs-specs-gen = [ "docx-rs"]

asn-compiler/src/bin/extract-asn-spec.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
33
use std::io::{Read, Write};
44

5+
use anyhow::Result;
56
use clap::Parser;
67

78
#[derive(Parser, Debug)]
@@ -14,7 +15,7 @@ struct Cli {
1415
output_file: String,
1516
}
1617

17-
fn main() -> std::io::Result<()> {
18+
fn main() -> Result<()> {
1819
let cli = Cli::parse();
1920

2021
let asn_start = regex::Regex::new("^-- ASN1START$").unwrap();

asn-compiler/src/bin/hampi-rs-asn1c.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//! A simple utility to tokenize ASN files.
22
3-
use std::io;
4-
3+
use anyhow::Result;
54
use clap::Parser;
65

76
use asn1_compiler::{
@@ -36,14 +35,15 @@ struct Cli {
3635
derive: Vec<Derive>,
3736
}
3837

39-
fn main() -> io::Result<()> {
38+
fn main() -> Result<()> {
4039
let mut cli = Cli::parse();
4140

4241
if cli.files.is_empty() {
4342
return Err(std::io::Error::new(
4443
std::io::ErrorKind::InvalidInput,
4544
"No Input files Specified",
46-
));
45+
)
46+
.into());
4747
}
4848

4949
let derives = if cli.derive.contains(&Derive::All) {

asn-compiler/src/compiler.rs

+12-13
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use std::process::{Command, Stdio};
1111
use topological_sort::TopologicalSort;
1212

1313
use crate::error::Error;
14+
use anyhow::Result;
1415

1516
use crate::parser::asn::structs::module::Asn1Module;
1617

@@ -79,7 +80,7 @@ impl Asn1Compiler {
7980
/// modules are topologically sorted as well. This makes Error handling for undefined
8081
/// definitions much easier.
8182
// FIXME: Support the case where module is imported by a name different from it's actual name.
82-
pub fn resolve_modules(&mut self) -> Result<(), Error> {
83+
pub fn resolve_modules(&mut self) -> Result<()> {
8384
log::info!("Resolving imports from all modules.");
8485
self.resolve_imports()?;
8586

@@ -88,7 +89,7 @@ impl Asn1Compiler {
8889
}
8990

9091
/// Generate the code
91-
pub fn generate(&mut self) -> Result<(), Error> {
92+
pub fn generate(&mut self) -> Result<()> {
9293
log::info!("Generating code, writing to file: {}", self.output_filename);
9394

9495
let input_text = self.generator.generate(&self.resolver)?;
@@ -109,7 +110,7 @@ impl Asn1Compiler {
109110
}
110111

111112
/// Compilation Driver for a String as module(s).
112-
pub fn compile_string(&mut self, modules_string: &str, parse_only: bool) -> Result<(), Error> {
113+
pub fn compile_string(&mut self, modules_string: &str, parse_only: bool) -> Result<()> {
113114
let mut tokens = crate::tokenizer::tokenize_string(modules_string)?;
114115
self.parse_tokens_into_modules(&mut tokens)?;
115116
if !parse_only {
@@ -121,10 +122,7 @@ impl Asn1Compiler {
121122
}
122123

123124
/// The Actual compilation driver
124-
pub fn compile_files<T: AsRef<Path> + std::fmt::Debug>(
125-
&mut self,
126-
files: &[T],
127-
) -> Result<(), Error> {
125+
pub fn compile_files<T: AsRef<Path> + std::fmt::Debug>(&mut self, files: &[T]) -> Result<()> {
128126
for file in files {
129127
log::info!("Processing file: {:?}", file);
130128
let file = File::open(file).map_err(|e| io_error!("{:#?}", e))?;
@@ -136,7 +134,7 @@ impl Asn1Compiler {
136134
self.generate()
137135
}
138136

139-
fn parse_tokens_into_modules(&mut self, tokens: &mut Vec<Token>) -> Result<(), Error> {
137+
fn parse_tokens_into_modules(&mut self, tokens: &mut Vec<Token>) -> Result<()> {
140138
log::debug!("Parsing {} tokens.", tokens.len());
141139
let mut modules = crate::parser::parse(tokens)?;
142140
loop {
@@ -151,7 +149,7 @@ impl Asn1Compiler {
151149
Ok(())
152150
}
153151

154-
fn rustfmt_generated_code(&self, code: &str) -> Result<String, Error> {
152+
fn rustfmt_generated_code(&self, code: &str) -> Result<String> {
155153
log::debug!("Runing `rustfmt` on the generated code.");
156154
let rustfmt_binary = "rustfmt"; // TODO: Get from `env` , 'custom path' etc.
157155
let mut cmd = Command::new(rustfmt_binary);
@@ -177,13 +175,13 @@ impl Asn1Compiler {
177175
match String::from_utf8(output) {
178176
Ok(formatted_output) => match status.code() {
179177
Some(0) => Ok(formatted_output),
180-
_ => Err(resolve_error!("`rustfmt` failed to write some bindings.")),
178+
_ => Err(resolve_error!("`rustfmt` failed to write some bindings.").into()),
181179
},
182180
_ => Ok(stdin_handle.join().unwrap()),
183181
}
184182
}
185183

186-
fn resolve_imports(&self) -> Result<(), Error> {
184+
fn resolve_imports(&self) -> Result<()> {
187185
log::debug!("Resolving imports.");
188186
for (_, module) in self.modules.iter() {
189187
for (import, module_name) in module.get_imported_defs() {
@@ -193,7 +191,8 @@ impl Asn1Compiler {
193191
"Module '{}', corresponding to definition '{}' not found!",
194192
module_name.name_as_str(),
195193
import
196-
));
194+
)
195+
.into());
197196
}
198197
}
199198
}
@@ -226,7 +225,7 @@ impl Asn1Compiler {
226225
out_vec
227226
}
228227

229-
fn resolve_definitions(&mut self) -> Result<(), Error> {
228+
fn resolve_definitions(&mut self) -> Result<()> {
230229
let module_names = self.sorted_modules();
231230
for name in module_names {
232231
let module = self.modules.get_mut(&name).unwrap();

asn-compiler/src/generator/asn/types/base/bitstring.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,13 @@
33
use proc_macro2::{Ident, TokenStream};
44
use quote::quote;
55

6-
use crate::error::Error;
6+
use anyhow::Result;
77

88
use crate::generator::Generator;
99
use crate::resolver::asn::structs::types::base::Asn1ResolvedBitString;
1010

1111
impl Asn1ResolvedBitString {
12-
pub(crate) fn generate(
13-
&self,
14-
name: &str,
15-
generator: &mut Generator,
16-
) -> Result<TokenStream, Error> {
12+
pub(crate) fn generate(&self, name: &str, generator: &mut Generator) -> Result<TokenStream> {
1713
let struct_name = generator.to_type_ident(name);
1814

1915
let mut ty_attributes = quote! { type = "BITSTRING" };
@@ -39,7 +35,7 @@ impl Asn1ResolvedBitString {
3935
&self,
4036
generator: &mut Generator,
4137
input: Option<&String>,
42-
) -> Result<Ident, Error> {
38+
) -> Result<Ident> {
4339
let unique_name = if let Some(unique_name) = input {
4440
unique_name.to_string()
4541
} else {

asn-compiler/src/generator/asn/types/base/boolean.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,12 @@
33
use proc_macro2::{Ident, TokenStream};
44
use quote::quote;
55

6-
use crate::error::Error;
76
use crate::generator::Generator;
87
use crate::resolver::asn::structs::types::base::Asn1ResolvedBoolean;
8+
use anyhow::Result;
99

1010
impl Asn1ResolvedBoolean {
11-
pub(crate) fn generate(
12-
&self,
13-
name: &str,
14-
generator: &mut Generator,
15-
) -> Result<TokenStream, Error> {
11+
pub(crate) fn generate(&self, name: &str, generator: &mut Generator) -> Result<TokenStream> {
1612
let type_name = generator.to_type_ident(name);
1713

1814
let vis = generator.get_visibility_tokens();
@@ -29,7 +25,7 @@ impl Asn1ResolvedBoolean {
2925
&self,
3026
generator: &mut Generator,
3127
input: Option<&String>,
32-
) -> Result<Ident, Error> {
28+
) -> Result<Ident> {
3329
let unique_name = if let Some(unique_name) = input {
3430
unique_name.to_string()
3531
} else {

asn-compiler/src/generator/asn/types/base/charstring.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,13 @@
33
use proc_macro2::{Ident, TokenStream};
44
use quote::quote;
55

6-
use crate::error::Error;
6+
use anyhow::Result;
77

88
use crate::generator::Generator;
99
use crate::resolver::asn::structs::types::base::Asn1ResolvedCharacterString;
1010

1111
impl Asn1ResolvedCharacterString {
12-
pub(crate) fn generate(
13-
&self,
14-
name: &str,
15-
generator: &mut Generator,
16-
) -> Result<TokenStream, Error> {
12+
pub(crate) fn generate(&self, name: &str, generator: &mut Generator) -> Result<TokenStream> {
1713
let struct_name = generator.to_type_ident(name);
1814
let char_str_type: proc_macro2::TokenStream =
1915
format!("\"{}\"", self.str_type).parse().unwrap();
@@ -41,7 +37,7 @@ impl Asn1ResolvedCharacterString {
4137
&self,
4238
generator: &mut Generator,
4339
input: Option<&String>,
44-
) -> Result<Ident, Error> {
40+
) -> Result<Ident> {
4541
let unique_name = if let Some(unique_name) = input {
4642
unique_name.to_string()
4743
} else {

asn-compiler/src/generator/asn/types/base/enumerated.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,13 @@
33
use proc_macro2::{Ident, TokenStream};
44
use quote::quote;
55

6-
use crate::error::Error;
6+
use anyhow::Result;
77

88
use crate::generator::Generator;
99
use crate::resolver::asn::structs::types::base::Asn1ResolvedEnumerated;
1010

1111
impl Asn1ResolvedEnumerated {
12-
pub(crate) fn generate(
13-
&self,
14-
name: &str,
15-
generator: &mut Generator,
16-
) -> Result<TokenStream, Error> {
12+
pub(crate) fn generate(&self, name: &str, generator: &mut Generator) -> Result<TokenStream> {
1713
let struct_name = generator.to_type_ident(name);
1814
let inner_type = generator.to_inner_type(self.bits, self.signed);
1915

@@ -43,7 +39,7 @@ impl Asn1ResolvedEnumerated {
4339
Ok(struct_tokens)
4440
}
4541

46-
fn generate_named_values(&self, generator: &Generator) -> Result<TokenStream, Error> {
42+
fn generate_named_values(&self, generator: &Generator) -> Result<TokenStream> {
4743
let mut tokens = TokenStream::new();
4844
for (name, value) in &self.named_root_values {
4945
let const_name = generator.to_const_ident(name);
@@ -65,7 +61,7 @@ impl Asn1ResolvedEnumerated {
6561
&self,
6662
generator: &mut Generator,
6763
input: Option<&String>,
68-
) -> Result<Ident, Error> {
64+
) -> Result<Ident> {
6965
let unique_name = if let Some(unique_name) = input {
7066
unique_name.to_string()
7167
} else {

asn-compiler/src/generator/asn/types/base/integer.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,13 @@
33
use proc_macro2::{Ident, TokenStream};
44
use quote::quote;
55

6-
use crate::error::Error;
6+
use anyhow::Result;
77

88
use crate::generator::Generator;
99
use crate::resolver::asn::structs::types::base::Asn1ResolvedInteger;
1010

1111
impl Asn1ResolvedInteger {
12-
pub(crate) fn generate(
13-
&self,
14-
name: &str,
15-
generator: &mut Generator,
16-
) -> Result<TokenStream, Error> {
12+
pub(crate) fn generate(&self, name: &str, generator: &mut Generator) -> Result<TokenStream> {
1713
let struct_name = generator.to_type_ident(name);
1814
let inner_type = generator.to_inner_type(self.bits, self.signed);
1915
let (min, max) = self.get_min_max_constraints();
@@ -68,7 +64,7 @@ impl Asn1ResolvedInteger {
6864
&self,
6965
generator: &mut Generator,
7066
input: Option<&String>,
71-
) -> Result<Ident, Error> {
67+
) -> Result<Ident> {
7268
let unique_name = if let Some(unique_name) = input {
7369
unique_name.to_string()
7470
} else {

asn-compiler/src/generator/asn/types/base/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ mod real;
2020

2121
use proc_macro2::{Ident, TokenStream};
2222

23-
use crate::error::Error;
2423
use crate::generator::Generator;
2524
use crate::resolver::asn::structs::types::base::ResolvedBaseType;
25+
use anyhow::Result;
2626

2727
impl ResolvedBaseType {
2828
pub(crate) fn generate_for_base_type(
2929
&self,
3030
name: &str,
3131
generator: &mut Generator,
32-
) -> Result<TokenStream, Error> {
32+
) -> Result<TokenStream> {
3333
match self {
3434
ResolvedBaseType::Integer(ref i) => i.generate(name, generator),
3535
ResolvedBaseType::Enum(ref e) => e.generate(name, generator),
@@ -47,7 +47,7 @@ impl ResolvedBaseType {
4747
&self,
4848
generator: &mut Generator,
4949
input: Option<&String>,
50-
) -> Result<Ident, Error> {
50+
) -> Result<Ident> {
5151
match self {
5252
ResolvedBaseType::Integer(ref i) => i.generate_ident_and_aux_type(generator, input),
5353
ResolvedBaseType::Enum(ref e) => e.generate_ident_and_aux_type(generator, input),

asn-compiler/src/generator/asn/types/base/null.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,12 @@
33
use proc_macro2::{Ident, TokenStream};
44
use quote::quote;
55

6-
use crate::error::Error;
76
use crate::generator::Generator;
87
use crate::resolver::asn::structs::types::base::Asn1ResolvedNull;
8+
use anyhow::Result;
99

1010
impl Asn1ResolvedNull {
11-
pub(crate) fn generate(
12-
&self,
13-
name: &str,
14-
generator: &mut Generator,
15-
) -> Result<TokenStream, Error> {
11+
pub(crate) fn generate(&self, name: &str, generator: &mut Generator) -> Result<TokenStream> {
1612
let type_name = generator.to_type_ident(name);
1713

1814
let vis = generator.get_visibility_tokens();
@@ -29,7 +25,7 @@ impl Asn1ResolvedNull {
2925
&self,
3026
generator: &mut Generator,
3127
input: Option<&String>,
32-
) -> Result<Ident, Error> {
28+
) -> Result<Ident> {
3329
let unique_name = if let Some(unique_name) = input {
3430
unique_name.to_string()
3531
} else {

asn-compiler/src/generator/asn/types/base/octetstring.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,13 @@
33
use proc_macro2::{Ident, TokenStream};
44
use quote::quote;
55

6-
use crate::error::Error;
6+
use anyhow::Result;
77

88
use crate::generator::Generator;
99
use crate::resolver::asn::structs::types::base::Asn1ResolvedOctetString;
1010

1111
impl Asn1ResolvedOctetString {
12-
pub(crate) fn generate(
13-
&self,
14-
name: &str,
15-
generator: &mut Generator,
16-
) -> Result<TokenStream, Error> {
12+
pub(crate) fn generate(&self, name: &str, generator: &mut Generator) -> Result<TokenStream> {
1713
let struct_name = generator.to_type_ident(name);
1814

1915
let mut ty_attributes = quote! { type = "OCTET-STRING" };
@@ -39,7 +35,7 @@ impl Asn1ResolvedOctetString {
3935
&self,
4036
generator: &mut Generator,
4137
input: Option<&String>,
42-
) -> Result<Ident, Error> {
38+
) -> Result<Ident> {
4339
let unique_name = if let Some(unique_name) = input {
4440
unique_name.to_string()
4541
} else {

0 commit comments

Comments
 (0)