use super::expected_type::ExpectedType;
use super::expression::Expression;
use super::types::{CharSetSpec, DistinctUnit, PropertyTag, RelationOp, RenderHintKind, SortOrder};
use crate::structure::Reference;
#[derive(Debug, Clone, PartialEq)]
pub enum Constraint {
Range {
target: Reference,
lower: Expression,
upper: Expression,
},
TypeDecl {
target: Reference,
expected: ExpectedType,
},
LengthRelation {
target: Reference,
length: Expression,
},
Relation {
lhs: Expression,
op: RelationOp,
rhs: Expression,
},
Distinct {
elements: Reference,
unit: DistinctUnit,
},
Property { target: Reference, tag: PropertyTag },
SumBound {
variable: Reference,
upper: Expression,
},
Sorted {
elements: Reference,
order: SortOrder,
},
Guarantee {
description: String,
predicate: Option<Expression>,
},
CharSet {
target: Reference,
charset: CharSetSpec,
},
StringLength {
target: Reference,
min: Expression,
max: Expression,
},
RenderHint {
target: Reference,
hint: RenderHintKind,
},
}