conspectuslib/dto/
scenario_section.rsuse serde::{Deserialize, Serialize};
use serde_json;
use std::io::Write;
use uuid::Uuid;
#[cfg(feature = "diesel")]
use {
diesel::deserialize::FromSql,
diesel::pg::types::sql_types::Jsonb,
diesel::pg::Pg,
diesel::serialize::{Output, ToSql},
};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "diesel", derive(AsExpression, FromSqlRow))]
#[cfg_attr(feature = "diesel", sql_type = "Jsonb")]
pub struct TargetObject {
#[serde(skip_serializing_if = "Option::is_none")]
pub briefing: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub form: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub article: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub test: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub videos: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pictures: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub polyglot_text: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub polyglot_image: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub robotics: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entity_id: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub task_id: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub level: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub slide : Option<serde_json::Value>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "diesel", derive(AsExpression, FromSqlRow))]
#[cfg_attr(feature = "diesel", sql_type = "Jsonb")]
pub struct ScenarioSection {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub scenario: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_object: Option<TargetObject>,
#[serde(skip_serializing_if = "Option::is_none")]
pub types: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub section_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub estimated_duration: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub intended_usage: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub student_visibility: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub comment: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "diesel", derive(AsExpression, FromSqlRow))]
#[cfg_attr(feature = "diesel", sql_type = "Jsonb")]
pub struct ScenarioSections(pub Vec<ScenarioSection>);
#[cfg(feature = "diesel")]
impl FromSql<Jsonb, Pg> for ScenarioSection {
fn from_sql(bytes: Option<&[u8]>) -> diesel::deserialize::Result<Self> {
let value = <serde_json::Value as FromSql<Jsonb, Pg>>::from_sql(bytes)?;
Ok(serde_json::from_value(value)?)
}
}
#[cfg(feature = "diesel")]
impl ToSql<Jsonb, Pg> for ScenarioSection {
fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> diesel::serialize::Result {
let value = serde_json::to_value(self)?;
<serde_json::Value as ToSql<Jsonb, Pg>>::to_sql(&value, out)
}
}
#[cfg(feature = "diesel")]
impl FromSql<Jsonb, Pg> for TargetObject {
fn from_sql(bytes: Option<&[u8]>) -> diesel::deserialize::Result<Self> {
let value = <serde_json::Value as FromSql<Jsonb, Pg>>::from_sql(bytes)?;
Ok(serde_json::from_value(value)?)
}
}
#[cfg(feature = "diesel")]
impl ToSql<Jsonb, Pg> for TargetObject {
fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> diesel::serialize::Result {
let value = serde_json::to_value(self)?;
<serde_json::Value as ToSql<Jsonb, Pg>>::to_sql(&value, out)
}
}
#[cfg(feature = "diesel")]
impl FromSql<Jsonb, Pg> for ScenarioSections {
fn from_sql(bytes: Option<&[u8]>) -> diesel::deserialize::Result<Self> {
let value = <serde_json::Value as FromSql<Jsonb, Pg>>::from_sql(bytes)?;
Ok(Self(serde_json::from_value(value)?))
}
}
#[cfg(feature = "diesel")]
impl ToSql<Jsonb, Pg> for ScenarioSections {
fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> diesel::serialize::Result {
let value = serde_json::to_value(self)?;
<serde_json::Value as ToSql<Jsonb, Pg>>::to_sql(&value, out)
}
}