use serde::{Deserialize, Serialize};
use std::ops::{Deref, DerefMut};
use qubit_common::DataType;
use qubit_value::MultiValues;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Property {
name: String,
value: MultiValues,
description: Option<String>,
is_final: bool,
}
impl Property {
#[inline]
pub fn new(name: impl Into<String>) -> Self {
Self {
name: name.into(),
value: MultiValues::Empty(DataType::Int32),
description: None,
is_final: false,
}
}
#[inline]
pub fn with_value(name: impl Into<String>, value: MultiValues) -> Self {
Self {
name: name.into(),
value,
description: None,
is_final: false,
}
}
#[inline]
pub fn name(&self) -> &str {
&self.name
}
#[inline]
pub fn value(&self) -> &MultiValues {
&self.value
}
#[inline]
pub fn value_mut(&mut self) -> &mut MultiValues {
&mut self.value
}
#[inline]
pub fn set_value(&mut self, value: MultiValues) {
self.value = value;
}
#[inline]
pub fn description(&self) -> Option<&str> {
self.description.as_deref()
}
#[inline]
pub fn set_description(&mut self, description: Option<String>) {
self.description = description;
}
#[inline]
pub fn is_final(&self) -> bool {
self.is_final
}
#[inline]
pub fn set_final(&mut self, is_final: bool) {
self.is_final = is_final;
}
#[inline]
pub fn data_type(&self) -> DataType {
self.value.data_type()
}
#[inline]
pub fn count(&self) -> usize {
self.value.count()
}
#[inline]
pub fn is_empty(&self) -> bool {
self.value.is_empty()
}
#[inline]
pub fn clear(&mut self) {
self.value.clear();
}
}
impl Deref for Property {
type Target = MultiValues;
#[inline]
fn deref(&self) -> &Self::Target {
&self.value
}
}
impl DerefMut for Property {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.value
}
}