Skip to content

Commit

Permalink
Implementing adapter traits using macro
Browse files Browse the repository at this point in the history
  • Loading branch information
adamAndMath committed Apr 8, 2019
1 parent fad7b35 commit 7da2597
Showing 1 changed file with 53 additions and 160 deletions.
213 changes: 53 additions & 160 deletions src/adapter/core_support/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,164 +12,57 @@
use crate::prelude::*;
use core::fmt;

impl fmt::Display for super::Hyphenated {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(self, f)
}
}

impl<'a> fmt::Display for super::HyphenatedRef<'a> {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(self, f)
}
}

impl fmt::Display for super::Simple {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(self, f)
}
}

impl<'a> fmt::Display for super::SimpleRef<'a> {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(self, f)
}
}

impl fmt::Display for super::Urn {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(self, f)
}
}

impl<'a> fmt::Display for super::UrnRef<'a> {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(self, f)
}
}

impl fmt::LowerHex for super::Hyphenated {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.encode_lower(&mut [0; Self::LENGTH]))
}
}

impl<'a> fmt::LowerHex for super::HyphenatedRef<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// TODO: Self doesn't work https://github.com/rust-lang/rust/issues/52808
f.write_str(self.encode_lower(&mut [0; super::HyphenatedRef::LENGTH]))
}
}

impl fmt::LowerHex for super::Simple {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.encode_lower(&mut [0; Self::LENGTH]))
}
}

impl<'a> fmt::LowerHex for super::SimpleRef<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// TODO: Self doesn't work https://github.com/rust-lang/rust/issues/52808
f.write_str(self.encode_lower(&mut [0; super::SimpleRef::LENGTH]))
}
}

impl fmt::LowerHex for super::Urn {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.encode_lower(&mut [0; Self::LENGTH]))
}
}

impl<'a> fmt::LowerHex for super::UrnRef<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// TODO: Self doesn't work https://github.com/rust-lang/rust/issues/52808
f.write_str(self.encode_lower(&mut [0; super::UrnRef::LENGTH]))
}
}

impl fmt::UpperHex for super::Hyphenated {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.encode_upper(&mut [0; Self::LENGTH]))
}
}

impl<'a> fmt::UpperHex for super::HyphenatedRef<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// TODO: Self doesn't work https://github.com/rust-lang/rust/issues/52808
f.write_str(self.encode_upper(&mut [0; super::HyphenatedRef::LENGTH]))
}
}

impl fmt::UpperHex for super::Simple {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.encode_upper(&mut [0; Self::LENGTH]))
}
}

impl<'a> fmt::UpperHex for super::SimpleRef<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// TODO: Self doesn't work https://github.com/rust-lang/rust/issues/52808
f.write_str(self.encode_upper(&mut [0; super::SimpleRef::LENGTH]))
}
}

impl fmt::UpperHex for super::Urn {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.encode_upper(&mut [0; Self::LENGTH]))
}
}

impl<'a> fmt::UpperHex for super::UrnRef<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// TODO: Self doesn't work https://github.com/rust-lang/rust/issues/52808
f.write_str(self.encode_upper(&mut [0; super::UrnRef::LENGTH]))
}
}

impl From<Uuid> for super::Hyphenated {
#[inline]
fn from(f: Uuid) -> Self {
super::Hyphenated::from_uuid(f)
}
}

impl<'a> From<&'a Uuid> for super::HyphenatedRef<'a> {
#[inline]
fn from(f: &'a Uuid) -> Self {
super::HyphenatedRef::from_uuid_ref(f)
}
}

impl From<Uuid> for super::Simple {
#[inline]
fn from(f: Uuid) -> Self {
super::Simple::from_uuid(f)
}
}

impl<'a> From<&'a Uuid> for super::SimpleRef<'a> {
#[inline]
fn from(f: &'a Uuid) -> Self {
super::SimpleRef::from_uuid_ref(f)
}
}

impl From<Uuid> for super::Urn {
#[inline]
fn from(f: Uuid) -> Self {
super::Urn::from_uuid(f)
}
}

impl<'a> From<&'a Uuid> for super::UrnRef<'a> {
#[inline]
fn from(f: &'a Uuid) -> Self {
super::UrnRef::from_uuid_ref(f)
}
macro_rules! impl_adapter_traits {
($($T:ident<$($a:lifetime),*>),+) => {$(
impl<$($a),*> fmt::Display for super::$T<$($a),*> {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(self, f)
}
}

impl<$($a),*> fmt::LowerHex for super::$T<$($a),*> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// TODO: Self doesn't work https://github.com/rust-lang/rust/issues/52808
f.write_str(self.encode_lower(&mut [0; super::$T::LENGTH]))
}
}

impl<$($a),*> fmt::UpperHex for super::$T<$($a),*> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// TODO: Self doesn't work https://github.com/rust-lang/rust/issues/52808
f.write_str(self.encode_upper(&mut [0; super::$T::LENGTH]))
}
}

impl_adapter_from!($T<$($a),*>);
)+}
}

macro_rules! impl_adapter_from {
($T:ident<>) => {
impl From<Uuid> for super::$T {
#[inline]
fn from(f: Uuid) -> Self {
super::$T::from_uuid(f)
}
}
};
($T:ident<$a:lifetime>) => {
impl<$a> From<&$a Uuid> for super::$T<$a> {
#[inline]
fn from(f: &$a Uuid) -> Self {
super::$T::from_uuid_ref(f)
}
}
};
}

impl_adapter_traits! {
Hyphenated<>,
HyphenatedRef<'a>,
Simple<>,
SimpleRef<'a>,
Urn<>,
UrnRef<'a>
}

0 comments on commit 7da2597

Please sign in to comment.