#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Sctid(pub u64);
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ConceptReference {
pub id: Sctid,
pub term: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct AltIdentifier {
pub scheme: String,
pub code: String,
pub term: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum FocusConcept {
Reference(ConceptReference),
Wildcard,
AltIdentifier(AltIdentifier),
Nested(Box<ExpressionConstraint>),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ConstraintOperator {
DescendantOf,
DescendantOrSelfOf,
ChildOf,
ChildOrSelfOf,
AncestorOf,
AncestorOrSelfOf,
ParentOf,
ParentOrSelfOf,
Top,
Bottom,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum RefsetFields {
Any,
Names(Vec<String>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct MemberOf {
pub fields: Option<RefsetFields>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct SubExpressionConstraint {
pub operator: Option<ConstraintOperator>,
pub member_of: Option<MemberOf>,
pub focus: FocusConcept,
pub member_filters: Vec<Vec<MemberFilter>>,
pub filters: Vec<FilterConstraint>,
pub history: Option<HistorySupplement>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum FilterConstraint {
Description(Vec<DescriptionFilter>),
Concept(Vec<ConceptFilter>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ExpressionConstraint {
Refined {
focus: SubExpressionConstraint,
refinement: Box<Refinement>,
},
Conjunction(Vec<SubExpressionConstraint>),
Disjunction(Vec<SubExpressionConstraint>),
Exclusion {
left: SubExpressionConstraint,
right: SubExpressionConstraint,
},
Dotted {
focus: SubExpressionConstraint,
attributes: Vec<SubExpressionConstraint>,
},
Sub(SubExpressionConstraint),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Refinement {
Single(Box<SubRefinement>),
Conjunction(Vec<SubRefinement>),
Disjunction(Vec<SubRefinement>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum SubRefinement {
AttributeSet(AttributeSet),
Group {
cardinality: Option<Cardinality>,
attributes: AttributeSet,
},
Nested(Box<Refinement>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum AttributeSet {
Single(Box<SubAttributeSet>),
Conjunction(Vec<SubAttributeSet>),
Disjunction(Vec<SubAttributeSet>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum SubAttributeSet {
Attribute(Box<Attribute>),
Nested(Box<AttributeSet>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Attribute {
pub cardinality: Option<Cardinality>,
pub reverse: bool,
pub name: SubExpressionConstraint,
pub value: AttributeValue,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum AttributeValue {
Expression {
operator: Equality,
value: SubExpressionConstraint,
},
Numeric {
operator: Comparison,
value: NumericValue,
},
String {
operator: Equality,
terms: Vec<TypedSearchTerm>,
},
Boolean {
operator: Equality,
value: bool,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Cardinality {
pub min: u32,
pub max: Option<u32>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Equality {
Equal,
NotEqual,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Comparison {
Equal,
NotEqual,
Less,
LessOrEqual,
Greater,
GreaterOrEqual,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct NumericValue(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum TypedSearchTerm {
Match(Vec<String>),
Wild(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DescriptionFilter {
Term {
operator: Equality,
terms: Vec<TypedSearchTerm>,
},
Language {
operator: Equality,
codes: Vec<String>,
},
TypeId {
operator: Equality,
value: ConceptSet,
},
Type {
operator: Equality,
tokens: Vec<TypeToken>,
},
DialectId {
operator: Equality,
value: DialectIdValue,
acceptability: Option<AcceptabilitySet>,
},
Dialect {
operator: Equality,
aliases: Vec<DialectAlias>,
acceptability: Option<AcceptabilitySet>,
},
Module {
operator: Equality,
value: ConceptSet,
},
EffectiveTime {
operator: Comparison,
values: Vec<TimeValue>,
},
Active {
operator: Equality,
value: bool,
},
Id {
operator: Equality,
ids: Vec<Sctid>,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ConceptSet {
Expression(SubExpressionConstraint),
Set(Vec<ConceptReference>),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TypeToken {
Synonym,
FullySpecifiedName,
Definition,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DialectIdValue {
Expression(SubExpressionConstraint),
Set(Vec<(ConceptReference, Option<AcceptabilitySet>)>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct DialectAlias {
pub alias: String,
pub acceptability: Option<AcceptabilitySet>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum AcceptabilitySet {
Concepts(Vec<ConceptReference>),
Tokens(Vec<Acceptability>),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Acceptability {
Acceptable,
Preferred,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct TimeValue(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ConceptFilter {
DefinitionStatusId {
operator: Equality,
value: ConceptSet,
},
DefinitionStatus {
operator: Equality,
tokens: Vec<DefinitionStatus>,
},
Module {
operator: Equality,
value: ConceptSet,
},
EffectiveTime {
operator: Comparison,
values: Vec<TimeValue>,
},
Active {
operator: Equality,
value: bool,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum DefinitionStatus {
Primitive,
Defined,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum MemberFilter {
Module {
operator: Equality,
value: ConceptSet,
},
EffectiveTime {
operator: Comparison,
values: Vec<TimeValue>,
},
Active {
operator: Equality,
value: bool,
},
Field {
name: String,
value: FieldValue,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum FieldValue {
Expression {
operator: Equality,
value: SubExpressionConstraint,
},
Numeric {
operator: Comparison,
value: NumericValue,
},
String {
operator: Equality,
terms: Vec<TypedSearchTerm>,
},
Boolean {
operator: Equality,
value: bool,
},
Time {
operator: Comparison,
values: Vec<TimeValue>,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum HistorySupplement {
Default,
Minimum,
Moderate,
Maximum,
Subset(Box<ExpressionConstraint>),
}