use std::ops::RangeBounds;
use proc_macro2::{Ident, Span};
use syn::LitStr;
macro_rules! and {
($($expr:expr),* $(,)?) => {
$($expr)&&*
};
}
pub fn ident(s: &str) -> Ident {
Ident::new(s, Span::call_site())
}
pub fn literal_string(s: &str) -> LitStr {
LitStr::new(s, Span::call_site())
}
pub fn inner_span<'a>(input: &'a str, input_lit_str: &LitStr, inside: &'a str) -> Span {
let input_offset = (inside.as_ptr() as usize) - (input.as_ptr() as usize);
let range = input_offset + 1..input_offset + inside.len() + 1;
subspan(input_lit_str.span(), range).unwrap_or_else(|| input_lit_str.span())
}
fn subspan<R: RangeBounds<usize>>(span: Span, range: R) -> Option<Span> {
let mut lit = proc_macro2::Literal::string("");
lit.set_span(span);
lit.subspan(range)
}