use crate::help::command_name;
use crate::model::{ContainerModel, Version};
use proc_macro2::TokenStream;
use quote::quote;
pub(super) fn version_value(container: &ContainerModel) -> Option<TokenStream> {
Some(match container.version.as_ref()? {
Version::Package => quote! { ::core::env!("CARGO_PKG_VERSION") },
Version::Literal(version) => quote! { #version },
})
}
fn version_text(container: &ContainerModel) -> Option<(TokenStream, TokenStream)> {
let version = version_value(container)?;
let name = command_name(container);
let display = quote! { ::core::concat!(#name, " ", #version) };
Some((version, display))
}
pub(super) fn version_tokens(container: &ContainerModel) -> (TokenStream, TokenStream) {
match version_text(container) {
Some((version, display)) => (
quote! {
pub const VERSION: &'static str = #version;
pub const VERSION_TEXT: &'static str = #display;
},
quote! {
getargs_derive::__private::Arg::Short('V') | getargs_derive::__private::Arg::Long("version") => {
return Err(getargs_derive::Error::Version(Self::VERSION_TEXT));
}
},
),
None => (quote! {}, quote! {}),
}
}