Skip to content

Commit

Permalink
Move BITS constant from CharSize to FixedCharSize trait
Browse files Browse the repository at this point in the history
  • Loading branch information
jbeaurivage committed Jul 30, 2021
1 parent f9654ec commit c1137c9
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions hal/src/sercom/v2/uart/charsize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ use num_traits::{AsPrimitive, PrimInt};
pub trait CharSize: Sealed {
/// Word size for the character size
type Word: 'static + PrimInt + AsPrimitive<DataReg>;
}

/// Type-level `enum` indicating a [`CharSize`] that is not dynamic
pub trait FixedCharSize: CharSize {
/// Bits to write into the `LENGTH` register
const BITS: CharSizeEnum;
}

/// Type-level `enum` indicating a [`CharSize`] that is not dynamic
pub trait FixedCharSize: CharSize {}

/// Type alias to recover the `Word` type from an implementation of [`CharSize`]
pub type Word<C> = <C as CharSize>::Word;

Expand Down Expand Up @@ -54,41 +54,44 @@ pub enum CharSizeEnum {
impl Sealed for FiveBit {}
impl CharSize for FiveBit {
type Word = u8;
}
impl FixedCharSize for FiveBit {
const BITS: CharSizeEnum = CharSizeEnum::FiveBit;
}
impl FixedCharSize for FiveBit {}

impl Sealed for SixBit {}
impl CharSize for SixBit {
type Word = u8;
}
impl FixedCharSize for SixBit {
const BITS: CharSizeEnum = CharSizeEnum::SixBit;
}
impl FixedCharSize for SixBit {}

impl Sealed for SevenBit {}
impl CharSize for SevenBit {
type Word = u8;
}
impl FixedCharSize for SevenBit {
const BITS: CharSizeEnum = CharSizeEnum::SevenBit;
}
impl FixedCharSize for SevenBit {}

impl Sealed for EightBit {}
impl CharSize for EightBit {
type Word = u8;
}
impl FixedCharSize for EightBit {
const BITS: CharSizeEnum = CharSizeEnum::EightBit;
}
impl FixedCharSize for EightBit {}

impl Sealed for NineBit {}
impl CharSize for NineBit {
type Word = u16;
}
impl FixedCharSize for NineBit {
const BITS: CharSizeEnum = CharSizeEnum::NineBit;
}
impl FixedCharSize for NineBit {}

impl Sealed for DynCharSize {}
impl CharSize for DynCharSize {
type Word = u16;
// Irrelevant for DynCharSize
const BITS: CharSizeEnum = CharSizeEnum::EightBit;
}

0 comments on commit c1137c9

Please sign in to comment.