use df_ls_core::{Choose, Reference};
use df_ls_diagnostics::{hash_map, DiagnosticsInfo};
use df_ls_syntax_analysis::{Token, TokenDeserialize, TryFromArgumentGroup};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct ItemReferenceArg {
pub item_type: Reference, pub item_subtype: Choose<NoSubtypeEnum, Reference>,
}
df_ls_syntax_analysis::token_deserialize_unary_token!(ItemReferenceArg);
impl TryFromArgumentGroup for ItemReferenceArg {
fn try_from_argument_group(
token: &mut Token,
source: &str,
diagnostics: &mut DiagnosticsInfo,
add_diagnostics_on_err: bool,
) -> Result<Self, ()> {
let item_type =
Reference::try_from_argument_group(token, source, diagnostics, add_diagnostics_on_err)?;
let item_subtype = Choose::<NoSubtypeEnum, Reference>::try_from_argument_group(
token,
source,
diagnostics,
add_diagnostics_on_err,
)?;
Ok(ItemReferenceArg {
item_type,
item_subtype,
})
}
}
#[derive(Serialize, Deserialize, Clone, Debug, TokenDeserialize, PartialEq, Eq)]
#[token_de(enum_value)]
pub enum NoSubtypeEnum {
#[token_de(token = "NONE", alias = "NO_SUBTYPE")]
None,
}
impl Default for NoSubtypeEnum {
fn default() -> Self {
Self::None
}
}