mirror of
https://git.proxmox.com/git/perlmod
synced 2025-10-04 13:01:42 +00:00
perlmod-macro: drop anyhow dependency
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
d253472380
commit
f888c202cc
@ -17,7 +17,6 @@ maintenance = { status = "experimental" }
|
|||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0"
|
|
||||||
proc-macro2 = "1.0"
|
proc-macro2 = "1.0"
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
syn = { version = "1.0", features = [ "full" ] }
|
syn = { version = "1.0", features = [ "full" ] }
|
||||||
|
@ -2,6 +2,7 @@ use std::convert::TryFrom;
|
|||||||
|
|
||||||
use proc_macro2::{Ident, Span};
|
use proc_macro2::{Ident, Span};
|
||||||
|
|
||||||
|
use syn::Error;
|
||||||
use syn::AttributeArgs;
|
use syn::AttributeArgs;
|
||||||
|
|
||||||
pub struct ModuleAttrs {
|
pub struct ModuleAttrs {
|
||||||
@ -11,7 +12,7 @@ pub struct ModuleAttrs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<AttributeArgs> for ModuleAttrs {
|
impl TryFrom<AttributeArgs> for ModuleAttrs {
|
||||||
type Error = syn::Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn try_from(args: AttributeArgs) -> Result<Self, Self::Error> {
|
fn try_from(args: AttributeArgs) -> Result<Self, Self::Error> {
|
||||||
let mut package_name = None;
|
let mut package_name = None;
|
||||||
@ -50,7 +51,7 @@ impl TryFrom<AttributeArgs> for ModuleAttrs {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn expand_env_vars(lit_str: &syn::LitStr) -> Result<String, syn::Error> {
|
fn expand_env_vars(lit_str: &syn::LitStr) -> Result<String, Error> {
|
||||||
let input = lit_str.value();
|
let input = lit_str.value();
|
||||||
let mut expanded = String::with_capacity(input.len());
|
let mut expanded = String::with_capacity(input.len());
|
||||||
|
|
||||||
@ -105,7 +106,7 @@ pub struct FunctionAttrs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<AttributeArgs> for FunctionAttrs {
|
impl TryFrom<AttributeArgs> for FunctionAttrs {
|
||||||
type Error = syn::Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn try_from(args: AttributeArgs) -> Result<Self, Self::Error> {
|
fn try_from(args: AttributeArgs) -> Result<Self, Self::Error> {
|
||||||
let mut attrs = FunctionAttrs::default();
|
let mut attrs = FunctionAttrs::default();
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
use anyhow::Error;
|
|
||||||
|
|
||||||
use proc_macro2::{Ident, Span, TokenStream};
|
use proc_macro2::{Ident, Span, TokenStream};
|
||||||
|
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
use syn::Error;
|
||||||
|
|
||||||
use crate::attribs::FunctionAttrs;
|
use crate::attribs::FunctionAttrs;
|
||||||
|
|
||||||
|
@ -7,17 +7,16 @@ extern crate proc_macro2;
|
|||||||
|
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
use anyhow::Error;
|
|
||||||
|
|
||||||
use proc_macro::TokenStream as TokenStream_1;
|
use proc_macro::TokenStream as TokenStream_1;
|
||||||
use proc_macro2::TokenStream;
|
use proc_macro2::TokenStream;
|
||||||
|
|
||||||
|
use syn::Error;
|
||||||
use syn::parse_macro_input;
|
use syn::parse_macro_input;
|
||||||
use syn::AttributeArgs;
|
use syn::AttributeArgs;
|
||||||
|
|
||||||
macro_rules! format_err {
|
macro_rules! format_err {
|
||||||
($span:expr => $($msg:tt)*) => { syn::Error::new_spanned($span, format!($($msg)*)) };
|
($span:expr => $($msg:tt)*) => { Error::new_spanned($span, format!($($msg)*)) };
|
||||||
($span:expr, $($msg:tt)*) => { syn::Error::new($span, format!($($msg)*)) };
|
($span:expr, $($msg:tt)*) => { Error::new($span, format!($($msg)*)) };
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! bail {
|
macro_rules! bail {
|
||||||
@ -33,12 +32,9 @@ mod package;
|
|||||||
fn handle_error(mut item: TokenStream, data: Result<TokenStream, Error>) -> TokenStream {
|
fn handle_error(mut item: TokenStream, data: Result<TokenStream, Error>) -> TokenStream {
|
||||||
match data {
|
match data {
|
||||||
Ok(output) => output,
|
Ok(output) => output,
|
||||||
Err(err) => match err.downcast::<syn::Error>() {
|
Err(err) => {
|
||||||
Ok(err) => {
|
item.extend(err.to_compile_error());
|
||||||
item.extend(err.to_compile_error());
|
item
|
||||||
item
|
|
||||||
}
|
|
||||||
Err(err) => panic!("error in api/router macro: {}", err),
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,6 +51,8 @@ fn handle_error(mut item: TokenStream, data: Result<TokenStream, Error>) -> Toke
|
|||||||
/// // 'name', 'lib' and 'file' expand environment variables such as `${CARGO_PKG_NAME}`
|
/// // 'name', 'lib' and 'file' expand environment variables such as `${CARGO_PKG_NAME}`
|
||||||
/// #[perlmod::package(name = "RSPM::Foo", lib = "perlmod_test", file = "/dev/null")]
|
/// #[perlmod::package(name = "RSPM::Foo", lib = "perlmod_test", file = "/dev/null")]
|
||||||
/// mod an_unused_name {
|
/// mod an_unused_name {
|
||||||
|
/// # pub mod anyhow { pub type Error = String; pub fn bail() {} }
|
||||||
|
/// # macro_rules! bail { ($($msg:tt)+) => { format!($($msg)+) }; }
|
||||||
/// use anyhow::{bail, Error};
|
/// use anyhow::{bail, Error};
|
||||||
///
|
///
|
||||||
/// // This function can be used like `RSPM::Foo::foo(1, 2);` in perl.
|
/// // This function can be used like `RSPM::Foo::foo(1, 2);` in perl.
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
use std::iter::IntoIterator;
|
use std::iter::IntoIterator;
|
||||||
|
|
||||||
use anyhow::Error;
|
|
||||||
|
|
||||||
use proc_macro2::TokenStream;
|
use proc_macro2::TokenStream;
|
||||||
|
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
use syn::punctuated::Punctuated;
|
use syn::punctuated::Punctuated;
|
||||||
|
use syn::Error;
|
||||||
use syn::{AttributeArgs, Token};
|
use syn::{AttributeArgs, Token};
|
||||||
|
|
||||||
use crate::attribs::FunctionAttrs;
|
use crate::attribs::FunctionAttrs;
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
use anyhow::Error;
|
|
||||||
|
|
||||||
use proc_macro2::{Ident, Span};
|
use proc_macro2::{Ident, Span};
|
||||||
|
|
||||||
|
use syn::Error;
|
||||||
use syn::AttributeArgs;
|
use syn::AttributeArgs;
|
||||||
|
|
||||||
use crate::attribs::ModuleAttrs;
|
use crate::attribs::ModuleAttrs;
|
||||||
@ -121,9 +120,9 @@ impl Package {
|
|||||||
|
|
||||||
let path = std::path::Path::new(&file_name);
|
let path = std::path::Path::new(&file_name);
|
||||||
if let Some(parent) = path.parent() {
|
if let Some(parent) = path.parent() {
|
||||||
std::fs::create_dir_all(parent)?;
|
std::fs::create_dir_all(parent).map_err(io_err)?;
|
||||||
}
|
}
|
||||||
std::fs::write(path, source.as_bytes())?;
|
std::fs::write(path, source.as_bytes()).map_err(io_err)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -133,7 +132,11 @@ impl Package {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_default_lib_name(why: Span) -> Result<String, syn::Error> {
|
fn io_err<E: ToString>(err: E) -> Error {
|
||||||
|
Error::new(Span::call_site(), err.to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_default_lib_name(why: Span) -> Result<String, Error> {
|
||||||
env::var("CARGO_PKG_NAME")
|
env::var("CARGO_PKG_NAME")
|
||||||
.map(|s| s.replace('-', "_"))
|
.map(|s| s.replace('-', "_"))
|
||||||
.map_err(|err| {
|
.map_err(|err| {
|
||||||
|
Loading…
Reference in New Issue
Block a user