use crate::entities::CellValue;
use crate::types::Handle;
#[derive(Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FieldChildValue {
pub key: String,
pub value: CellValue,
}
#[derive(Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Field {
pub handle: Handle,
pub owner: Handle,
pub evaluator_id: String,
pub code: String,
pub format: String,
pub child_fields: Vec<Handle>,
pub referenced_objects: Vec<Handle>,
pub evaluation_option: i32,
pub filing_option: i32,
pub state: i32,
pub evaluation_status: i32,
pub evaluation_error_code: i32,
pub evaluation_error_message: String,
pub value: CellValue,
pub value_string: String,
pub value_string_length: i32,
pub child_values: Vec<FieldChildValue>,
pub xdata: crate::xdata::ExtendedData,
}
#[derive(Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FieldList {
pub handle: Handle,
pub owner: Handle,
pub unknown: bool,
pub fields: Vec<Handle>,
}
impl Field {
pub fn pre2007_format(&self) -> &str {
if self.format.is_empty() {
&self.value.format
} else {
&self.format
}
}
pub(crate) fn visit_handles_mut(&mut self, visit: &mut impl FnMut(&mut Handle)) {
visit(&mut self.owner);
for handle in &mut self.child_fields {
visit(handle);
}
for handle in &mut self.referenced_objects {
visit(handle);
}
if let Some(handle) = self.value.handle_value.as_mut() {
visit(handle);
}
for child in &mut self.child_values {
if let Some(handle) = child.value.handle_value.as_mut() {
visit(handle);
}
}
}
}
impl FieldList {
pub(crate) fn visit_handles_mut(&mut self, visit: &mut impl FnMut(&mut Handle)) {
visit(&mut self.owner);
for handle in &mut self.fields {
visit(handle);
}
}
}