mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 20:14:49 +00:00
Feature/backup fs (#2665)
* port 040 config, WIP * update fixtures * use taiga modal for backups too * fix: update Taiga UI and refactor everything to work * chore: package-lock * fix interfaces and mocks for interfaces * better mocks * function to transform old spec to new * delete unused fns * delete unused FE config utils * fix exports from sdk * reorganize exports * functions to translate config * rename unionSelectKey and unionValueKey * new backup fs * update sdk types * change types, include fuse module * fix casing * rework setup wiz * rework UI * only fuse3 * fix arm build * misc fixes * fix duplicate server select * fix: fix throwing inside dialog --------- Co-authored-by: Matt Hill <mattnine@protonmail.com> Co-authored-by: waterplea <alexander@inkin.ru> Co-authored-by: Matt Hill <MattDHill@users.noreply.github.com>
This commit is contained in:
@@ -107,64 +107,22 @@ pub fn serialize_display_opt<T: std::fmt::Display, S: Serializer>(
|
||||
Option::<String>::serialize(&t.as_ref().map(|t| t.to_string()), serializer)
|
||||
}
|
||||
|
||||
pub mod ed25519_pubkey {
|
||||
use ed25519_dalek::VerifyingKey;
|
||||
use serde::de::{Error, Unexpected, Visitor};
|
||||
use serde::{Deserializer, Serializer};
|
||||
|
||||
pub fn serialize<S: Serializer>(
|
||||
pubkey: &VerifyingKey,
|
||||
serializer: S,
|
||||
) -> Result<S::Ok, S::Error> {
|
||||
serializer.serialize_str(&base32::encode(
|
||||
base32::Alphabet::RFC4648 { padding: true },
|
||||
pubkey.as_bytes(),
|
||||
))
|
||||
}
|
||||
pub fn deserialize<'de, D: Deserializer<'de>>(
|
||||
deserializer: D,
|
||||
) -> Result<VerifyingKey, D::Error> {
|
||||
struct PubkeyVisitor;
|
||||
impl<'de> Visitor<'de> for PubkeyVisitor {
|
||||
type Value = ed25519_dalek::VerifyingKey;
|
||||
fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(formatter, "an RFC4648 encoded string")
|
||||
}
|
||||
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
|
||||
where
|
||||
E: Error,
|
||||
{
|
||||
VerifyingKey::from_bytes(
|
||||
&<[u8; 32]>::try_from(
|
||||
base32::decode(base32::Alphabet::RFC4648 { padding: true }, v).ok_or(
|
||||
Error::invalid_value(Unexpected::Str(v), &"an RFC4648 encoded string"),
|
||||
)?,
|
||||
)
|
||||
.map_err(|e| Error::invalid_length(e.len(), &"32 bytes"))?,
|
||||
)
|
||||
.map_err(Error::custom)
|
||||
}
|
||||
}
|
||||
deserializer.deserialize_str(PubkeyVisitor)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
#[serde(untagged)]
|
||||
pub enum ValuePrimative {
|
||||
pub enum ValuePrimitive {
|
||||
Null,
|
||||
Boolean(bool),
|
||||
String(String),
|
||||
Number(serde_json::Number),
|
||||
}
|
||||
impl<'de> serde::de::Deserialize<'de> for ValuePrimative {
|
||||
impl<'de> serde::de::Deserialize<'de> for ValuePrimitive {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
D: serde::de::Deserializer<'de>,
|
||||
{
|
||||
struct Visitor;
|
||||
impl<'de> serde::de::Visitor<'de> for Visitor {
|
||||
type Value = ValuePrimative;
|
||||
type Value = ValuePrimitive;
|
||||
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
write!(formatter, "a JSON primative value")
|
||||
}
|
||||
@@ -172,37 +130,37 @@ impl<'de> serde::de::Deserialize<'de> for ValuePrimative {
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Null)
|
||||
Ok(ValuePrimitive::Null)
|
||||
}
|
||||
fn visit_none<E>(self) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Null)
|
||||
Ok(ValuePrimitive::Null)
|
||||
}
|
||||
fn visit_bool<E>(self, v: bool) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Boolean(v))
|
||||
Ok(ValuePrimitive::Boolean(v))
|
||||
}
|
||||
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::String(v.to_owned()))
|
||||
Ok(ValuePrimitive::String(v.to_owned()))
|
||||
}
|
||||
fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::String(v))
|
||||
Ok(ValuePrimitive::String(v))
|
||||
}
|
||||
fn visit_f32<E>(self, v: f32) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(
|
||||
Ok(ValuePrimitive::Number(
|
||||
serde_json::Number::from_f64(v as f64).ok_or_else(|| {
|
||||
serde::de::Error::invalid_value(
|
||||
serde::de::Unexpected::Float(v as f64),
|
||||
@@ -215,7 +173,7 @@ impl<'de> serde::de::Deserialize<'de> for ValuePrimative {
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(
|
||||
Ok(ValuePrimitive::Number(
|
||||
serde_json::Number::from_f64(v).ok_or_else(|| {
|
||||
serde::de::Error::invalid_value(
|
||||
serde::de::Unexpected::Float(v),
|
||||
@@ -228,49 +186,49 @@ impl<'de> serde::de::Deserialize<'de> for ValuePrimative {
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(v.into()))
|
||||
Ok(ValuePrimitive::Number(v.into()))
|
||||
}
|
||||
fn visit_u16<E>(self, v: u16) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(v.into()))
|
||||
Ok(ValuePrimitive::Number(v.into()))
|
||||
}
|
||||
fn visit_u32<E>(self, v: u32) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(v.into()))
|
||||
Ok(ValuePrimitive::Number(v.into()))
|
||||
}
|
||||
fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(v.into()))
|
||||
Ok(ValuePrimitive::Number(v.into()))
|
||||
}
|
||||
fn visit_i8<E>(self, v: i8) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(v.into()))
|
||||
Ok(ValuePrimitive::Number(v.into()))
|
||||
}
|
||||
fn visit_i16<E>(self, v: i16) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(v.into()))
|
||||
Ok(ValuePrimitive::Number(v.into()))
|
||||
}
|
||||
fn visit_i32<E>(self, v: i32) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(v.into()))
|
||||
Ok(ValuePrimitive::Number(v.into()))
|
||||
}
|
||||
fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(ValuePrimative::Number(v.into()))
|
||||
Ok(ValuePrimitive::Number(v.into()))
|
||||
}
|
||||
}
|
||||
deserializer.deserialize_any(Visitor)
|
||||
|
||||
Reference in New Issue
Block a user