use proc_macro2::TokenStream;
use quote::quote;
use syn::{Ident, LitInt, Type};
pub fn impl_bounded(struct_name: &Ident, ty: &Type, shift: &Option<LitInt>) -> TokenStream {
if let Some(shift) = shift {
quote! {
impl num_traits::Bounded for #struct_name {
fn min_value() -> Self {
Self::from_bits(#ty::MIN >> #shift << #shift)
}
fn max_value() -> Self {
Self::from_bits(#ty::MAX >> #shift << #shift)
}
}
}
} else {
quote! {
impl num_traits::Bounded for #struct_name {
fn min_value() -> Self {
Self::from_bits(#ty::MIN)
}
fn max_value() -> Self {
Self::from_bits(#ty::MAX)
}
}
}
}
}