parent
14daa662bd
commit
5e24e96ffe
@ -0,0 +1,120 @@
|
|||||||
|
//! Conversion formats
|
||||||
|
use super::*;
|
||||||
|
use std::{
|
||||||
|
ops::Deref,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/// A string of modified base64, appropriate for URL paths etc.
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||||
|
pub struct ModifiedBase64String(String);
|
||||||
|
|
||||||
|
impl ModifiedBase64String
|
||||||
|
{
|
||||||
|
/// Get as a reference
|
||||||
|
#[inline(always)] pub fn as_str(&self) -> &ModifiedBase64
|
||||||
|
{
|
||||||
|
ModifiedBase64::new_unchecked(&self.0[..])
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get as a mutable reference
|
||||||
|
#[inline(always)] fn as_mut_str(&mut self) -> &mut ModifiedBase64
|
||||||
|
{
|
||||||
|
ModifiedBase64::new_unchecked_mut(&mut self.0[..])
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Consume into regular base64 string
|
||||||
|
pub fn into_base64(mut self) -> String
|
||||||
|
{
|
||||||
|
self.as_mut_str().unmodify();
|
||||||
|
self.0
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create from a refular base64 string
|
||||||
|
pub fn from_base64(mut string: String) -> Self
|
||||||
|
{
|
||||||
|
ModifiedBase64::modify(&mut string[..]);
|
||||||
|
Self(string)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsRef<ModifiedBase64> for ModifiedBase64String
|
||||||
|
{
|
||||||
|
#[inline] fn as_ref(&self) -> &ModifiedBase64
|
||||||
|
{
|
||||||
|
self.as_str()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl Deref for ModifiedBase64String
|
||||||
|
{
|
||||||
|
type Target = ModifiedBase64;
|
||||||
|
|
||||||
|
#[inline] fn deref(&self) -> &Self::Target {
|
||||||
|
self.as_str()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A string slice of modified base64, appropriate for URL paths etc.
|
||||||
|
#[derive(Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize)]
|
||||||
|
#[repr(transparent)]
|
||||||
|
pub struct ModifiedBase64(str);
|
||||||
|
|
||||||
|
impl ModifiedBase64
|
||||||
|
{
|
||||||
|
#[inline(always)] fn new_unchecked<'a>(from: &'a str) -> &'a ModifiedBase64
|
||||||
|
{
|
||||||
|
unsafe {
|
||||||
|
std::mem::transmute(from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(always)] fn new_unchecked_mut<'a>(from: &'a mut str) -> &'a mut ModifiedBase64
|
||||||
|
{
|
||||||
|
unsafe {
|
||||||
|
std::mem::transmute(from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the underlying string slice
|
||||||
|
#[inline] pub fn as_str(&self) -> &str
|
||||||
|
{
|
||||||
|
unsafe {
|
||||||
|
std::mem::transmute::<&'_ Self, &'_ str>(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the underlying string slice as a mutable reference.
|
||||||
|
///
|
||||||
|
/// # This is not safe to expose in the API.
|
||||||
|
#[inline] fn as_mut_str(&mut self) -> &mut str
|
||||||
|
{
|
||||||
|
unsafe {
|
||||||
|
std::mem::transmute::<&'_ mut Self, &'_ mut str>(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn unmodify(&mut self) -> &mut str
|
||||||
|
{
|
||||||
|
todo!();
|
||||||
|
|
||||||
|
self.as_mut_str()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Modify this base64 string into a mutable reference to self
|
||||||
|
pub fn modify(base64: &mut str) -> &mut Self
|
||||||
|
{
|
||||||
|
todo!();
|
||||||
|
|
||||||
|
Self::new_unchecked_mut(base64)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsRef<ModifiedBase64> for ModifiedBase64
|
||||||
|
{
|
||||||
|
#[inline(always)] fn as_ref(&self) -> &ModifiedBase64
|
||||||
|
{
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue