mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 04:04:55 +08:00
refactor(core): move authentication data fields to authentication table (#4093)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> Co-authored-by: sai-harsha-vardhan <harsha111hero@gmail.com> Co-authored-by: Sai Harsha Vardhan <56996463+sai-harsha-vardhan@users.noreply.github.com>
This commit is contained in:
@ -1,12 +1,21 @@
|
||||
//! Types that can be used in other crates
|
||||
use std::{fmt::Display, str::FromStr};
|
||||
|
||||
use diesel::{
|
||||
backend::Backend,
|
||||
deserialize::FromSql,
|
||||
serialize::{Output, ToSql},
|
||||
sql_types::Jsonb,
|
||||
AsExpression, FromSqlRow,
|
||||
};
|
||||
use error_stack::{IntoReport, ResultExt};
|
||||
use semver::Version;
|
||||
use serde::{de::Visitor, Deserialize, Deserializer};
|
||||
|
||||
use crate::{
|
||||
consts,
|
||||
errors::{CustomResult, PercentageError},
|
||||
errors::{CustomResult, ParsingError, PercentageError},
|
||||
};
|
||||
|
||||
/// Represents Percentage Value between 0 and 100 both inclusive
|
||||
#[derive(Clone, Default, Debug, PartialEq, serde::Serialize)]
|
||||
pub struct Percentage<const PRECISION: u8> {
|
||||
@ -149,3 +158,56 @@ pub enum Surcharge {
|
||||
/// Surcharge percentage
|
||||
Rate(Percentage<{ consts::SURCHARGE_PERCENTAGE_PRECISION_LENGTH }>),
|
||||
}
|
||||
|
||||
/// This struct lets us represent a semantic version type
|
||||
#[derive(Debug, Clone, PartialEq, Eq, FromSqlRow, AsExpression)]
|
||||
#[diesel(sql_type = Jsonb)]
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
pub struct SemanticVersion(#[serde(with = "Version")] Version);
|
||||
|
||||
impl SemanticVersion {
|
||||
/// returns major version number
|
||||
pub fn get_major(&self) -> u64 {
|
||||
self.0.major
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for SemanticVersion {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{}", self.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for SemanticVersion {
|
||||
type Err = error_stack::Report<ParsingError>;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
Ok(Self(Version::from_str(s).into_report().change_context(
|
||||
ParsingError::StructParseFailure("SemanticVersion"),
|
||||
)?))
|
||||
}
|
||||
}
|
||||
|
||||
impl<DB: Backend> FromSql<Jsonb, DB> for SemanticVersion
|
||||
where
|
||||
serde_json::Value: FromSql<Jsonb, DB>,
|
||||
{
|
||||
fn from_sql(bytes: DB::RawValue<'_>) -> diesel::deserialize::Result<Self> {
|
||||
let value = <serde_json::Value as FromSql<Jsonb, DB>>::from_sql(bytes)?;
|
||||
Ok(serde_json::from_value(value)?)
|
||||
}
|
||||
}
|
||||
|
||||
impl ToSql<Jsonb, diesel::pg::Pg> for SemanticVersion
|
||||
where
|
||||
serde_json::Value: ToSql<Jsonb, diesel::pg::Pg>,
|
||||
{
|
||||
fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, diesel::pg::Pg>) -> diesel::serialize::Result {
|
||||
let value = serde_json::to_value(self)?;
|
||||
|
||||
// the function `reborrow` only works in case of `Pg` backend. But, in case of other backends
|
||||
// please refer to the diesel migration blog:
|
||||
// https://github.com/Diesel-rs/Diesel/blob/master/guide_drafts/migration_guide.md#changed-tosql-implementations
|
||||
<serde_json::Value as ToSql<Jsonb, diesel::pg::Pg>>::to_sql(&value, &mut out.reborrow())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user