use crate::source::SourceRange;
use crate::types::{Access, Kind};
use super::types::*;
#[derive(Debug, Clone)]
pub struct EntityData {
pub(crate) name: String,
pub(crate) range: Option<SourceRange>,
pub(crate) node: Option<NodeId>,
pub(crate) module: Option<ModuleId>,
pub(crate) status: crate::types::Status,
pub(crate) description: String,
pub(crate) reference: String,
pub(crate) status_range: Option<SourceRange>,
pub(crate) description_range: Option<SourceRange>,
pub(crate) reference_range: Option<SourceRange>,
pub(crate) oid_refs: Vec<OidRef>,
}
impl EntityData {
pub(crate) fn new(name: String) -> Self {
Self {
name,
range: None,
node: None,
module: None,
status: crate::types::Status::Current,
description: String::new(),
reference: String::new(),
status_range: None,
description_range: None,
reference_range: None,
oid_refs: Vec::new(),
}
}
}
#[derive(Debug, Clone)]
pub struct ObjectData {
pub(crate) entity: EntityData,
pub(crate) declared_kind: Kind,
pub(crate) typ: Option<TypeId>,
pub(crate) access: Access,
pub(crate) units: String,
pub(crate) def_val: Option<DefVal>,
pub(crate) augments: Option<ObjectId>,
pub(crate) augmented_by: Vec<ObjectId>,
pub(crate) syntax_range: Option<SourceRange>,
pub(crate) access_range: Option<SourceRange>,
pub(crate) units_range: Option<SourceRange>,
pub(crate) augments_range: Option<SourceRange>,
pub(crate) default_value_range: Option<SourceRange>,
pub(crate) index: Vec<IndexEntry>,
pub(crate) hint: String,
pub(crate) sizes: Vec<Range>,
pub(crate) ranges: Vec<Range>,
pub(crate) declared_sizes: Vec<Range>,
pub(crate) declared_ranges: Vec<Range>,
pub(crate) sizes_constrained: bool,
pub(crate) ranges_constrained: bool,
pub(crate) enums: Vec<NamedValue>,
pub(crate) bits: Vec<NamedValue>,
pub(crate) declared_enums: Vec<NamedValue>,
pub(crate) declared_bits: Vec<NamedValue>,
pub(crate) sequence_type_name: String,
pub(crate) declared_table_name: String,
pub(crate) declared_row_name: String,
pub(crate) declared_column_names: Vec<String>,
pub(crate) declared_oid_parent: Option<OidRef>,
pub(crate) declared_structure_error: String,
}
impl ObjectData {
pub(crate) fn new(name: String) -> Self {
Self {
entity: EntityData::new(name),
declared_kind: Kind::Unknown,
typ: None,
access: Access::NotAccessible,
units: String::new(),
def_val: None,
augments: None,
augmented_by: Vec::new(),
syntax_range: None,
access_range: None,
units_range: None,
augments_range: None,
default_value_range: None,
index: Vec::new(),
hint: String::new(),
sizes: Vec::new(),
ranges: Vec::new(),
declared_sizes: Vec::new(),
declared_ranges: Vec::new(),
sizes_constrained: false,
ranges_constrained: false,
enums: Vec::new(),
bits: Vec::new(),
declared_enums: Vec::new(),
declared_bits: Vec::new(),
sequence_type_name: String::new(),
declared_table_name: String::new(),
declared_row_name: String::new(),
declared_column_names: Vec::new(),
declared_oid_parent: None,
declared_structure_error: String::new(),
}
}
}
impl ObjectData {
pub fn name(&self) -> &str {
&self.entity.name
}
pub fn range(&self) -> Option<SourceRange> {
self.entity.range
}
pub fn node(&self) -> Option<NodeId> {
self.entity.node
}
pub fn module(&self) -> Option<ModuleId> {
self.entity.module
}
pub fn status(&self) -> crate::types::Status {
self.entity.status
}
pub fn description(&self) -> &str {
&self.entity.description
}
pub fn reference(&self) -> &str {
&self.entity.reference
}
pub fn oid_refs(&self) -> &[OidRef] {
&self.entity.oid_refs
}
pub fn type_id(&self) -> Option<TypeId> {
self.typ
}
pub fn access(&self) -> Access {
self.access
}
pub fn units(&self) -> &str {
&self.units
}
pub fn default_value(&self) -> Option<&DefVal> {
self.def_val.as_ref()
}
pub fn augments(&self) -> Option<ObjectId> {
self.augments
}
pub fn augmented_by(&self) -> &[ObjectId] {
&self.augmented_by
}
pub fn kind(&self, tree: &super::node::OidTree) -> Kind {
match self.entity.node {
Some(id) => tree.get(id).kind,
None => Kind::Unknown,
}
}
pub fn declared_kind(&self) -> Kind {
self.declared_kind
}
pub fn effective_display_hint(&self) -> &str {
&self.hint
}
#[allow(clippy::misnamed_getters)] pub fn sizes(&self) -> &[Range] {
&self.declared_sizes
}
pub fn declared_sizes(&self) -> &[Range] {
&self.declared_sizes
}
pub fn effective_sizes(&self) -> &[Range] {
&self.sizes
}
pub fn effective_sizes_constrained(&self) -> bool {
self.sizes_constrained
}
#[allow(clippy::misnamed_getters)] pub fn ranges(&self) -> &[Range] {
&self.declared_ranges
}
pub fn declared_ranges(&self) -> &[Range] {
&self.declared_ranges
}
pub fn effective_ranges(&self) -> &[Range] {
&self.ranges
}
pub fn effective_ranges_constrained(&self) -> bool {
self.ranges_constrained
}
pub fn effective_enums(&self) -> &[NamedValue] {
&self.enums
}
pub fn effective_bits(&self) -> &[NamedValue] {
&self.bits
}
pub fn declared_enums(&self) -> &[NamedValue] {
&self.declared_enums
}
pub fn declared_bits(&self) -> &[NamedValue] {
&self.declared_bits
}
pub fn sequence_type_name(&self) -> &str {
&self.sequence_type_name
}
pub fn declared_table_name(&self) -> &str {
&self.declared_table_name
}
pub fn declared_row_name(&self) -> &str {
&self.declared_row_name
}
pub fn declared_column_names(&self) -> &[String] {
&self.declared_column_names
}
pub fn declared_oid_parent(&self) -> Option<&OidRef> {
self.declared_oid_parent.as_ref()
}
pub fn declared_oid_parent_name(&self) -> &str {
self.declared_oid_parent
.as_ref()
.map_or("", |reference| reference.name.as_str())
}
pub(crate) fn declared_structure_error(&self) -> &str {
&self.declared_structure_error
}
pub fn index(&self) -> &[IndexEntry] {
&self.index
}
pub fn syntax_range(&self) -> Option<SourceRange> {
self.syntax_range
}
pub fn access_range(&self) -> Option<SourceRange> {
self.access_range
}
pub fn units_range(&self) -> Option<SourceRange> {
self.units_range
}
pub fn augments_range(&self) -> Option<SourceRange> {
self.augments_range
}
pub fn default_value_range(&self) -> Option<SourceRange> {
self.default_value_range
}
pub fn enum_by_label(&self, label: &str) -> Option<&NamedValue> {
find_named_value(&self.enums, label)
}
pub fn bit_by_label(&self, label: &str) -> Option<&NamedValue> {
find_named_value(&self.bits, label)
}
}