versa 1.6.0-alpha2

Versa types and utilities for developing Versa client applications in Rust
Documentation
use serde::{Deserialize, Serialize};

// Feature flagged imports

use std::fmt;
#[cfg(feature = "diesel")]
use std::io::Write;

#[cfg(feature = "diesel")]
use diesel::deserialize::{self, FromSql, FromSqlRow};
#[cfg(feature = "diesel")]
use diesel::prelude::*;
#[cfg(feature = "diesel")]
use diesel::serialize::{self, IsNull, Output, ToSql};
#[cfg(feature = "diesel")]
use diesel::{expression::AsExpression, sql_types::Text};

#[cfg(feature = "diesel")]
use diesel::mysql::{Mysql, MysqlValue};

#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq, Hash)]
#[cfg_attr(
  feature = "diesel",
  derive(diesel::expression::AsExpression, diesel::deserialize::FromSqlRow)
)]
#[cfg_attr(feature = "diesel", diesel(sql_type = Text))]
pub enum EventType {
  #[serde(rename = "itinerary")]
  Itinerary,
  #[serde(rename = "receipt")]
  Receipt,
  #[serde(rename = "transit_route.status.updated")]
  TransitRouteStatusUpdated,
  #[serde(rename = "transit_route.location.updated")]
  TransitRouteLocationUpdated,
}

#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq, Hash)]
#[cfg_attr(
  feature = "diesel",
  derive(diesel::expression::AsExpression, diesel::deserialize::FromSqlRow)
)]
#[cfg_attr(feature = "diesel", diesel(sql_type = Text))]
#[cfg_attr(test, derive(strum::EnumIter))]
pub enum InitialEventType {
  #[serde(rename = "itinerary")]
  Itinerary,
  #[serde(rename = "receipt")]
  Receipt,
}

#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq, Hash)]
#[cfg_attr(
  feature = "diesel",
  derive(diesel::expression::AsExpression, diesel::deserialize::FromSqlRow)
)]
#[cfg_attr(feature = "diesel", diesel(sql_type = Text))]
#[cfg_attr(test, derive(strum::EnumIter))]
pub enum UpdateEventType {
  #[serde(rename = "transit_route.status.updated")]
  TransitRouteStatusUpdated,
  #[serde(rename = "transit_route.location.updated")]
  TransitRouteLocationUpdated,
}

impl From<InitialEventType> for EventType {
  fn from(event: InitialEventType) -> Self {
    match event {
      InitialEventType::Itinerary => EventType::Itinerary,
      InitialEventType::Receipt => EventType::Receipt,
    }
  }
}

impl From<UpdateEventType> for EventType {
  fn from(event: UpdateEventType) -> Self {
    match event {
      UpdateEventType::TransitRouteStatusUpdated => EventType::TransitRouteStatusUpdated,
      UpdateEventType::TransitRouteLocationUpdated => EventType::TransitRouteLocationUpdated,
    }
  }
}

impl fmt::Display for EventType {
  fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    let serialized = serde_json::to_string(self).unwrap().replace("\"", "");
    write!(f, "{}", serialized)
  }
}

impl fmt::Display for InitialEventType {
  fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    let serialized = serde_json::to_string(self).unwrap().replace("\"", "");
    write!(f, "{}", serialized)
  }
}

impl fmt::Display for UpdateEventType {
  fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    let serialized = serde_json::to_string(self).unwrap().replace("\"", "");
    write!(f, "{}", serialized)
  }
}