use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ContextionaryConcept {
pub individual_words: Vec<IndividualWords>,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct IndividualWords {
pub info: Option<ContextionaryConceptInfo>,
pub present: Option<bool>,
pub word: String,
pub concatenated_word: Option<ConcatenatedWord>,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ContextionaryConceptInfo {
pub nearest_neighbors: Vec<IndividualWord>,
pub vector: Vec<f64>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct IndividualWord {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub distance: Option<f64>,
pub word: String,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ConcatenatedWords {
concatenated_word: ConcatenatedWord,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ConcatenatedWord {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
single_words: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
concatenated_vector: Option<Vec<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
concatenated_nearest_neighbors: Option<Vec<IndividualWord>>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ContextionaryExtension {
pub concept: String,
pub definition: String,
pub weight: f64,
}
impl ContextionaryExtension {
pub fn new(concept: &str, definition: &str, weight: f64) -> ContextionaryExtension {
ContextionaryExtension { concept: concept.into(), definition: definition.into(), weight }
}
}