rust-embedded / svd2rust

Generate Rust register maps (`struct`s) from SVD files
Apache License 2.0
675 stars 147 forks source link

Derived fields duplicate enums instead type cast #745

Closed kossnikita closed 9 months ago

kossnikita commented 9 months ago

Derived field

<field derivedFrom="RELOAD">
  <name>IDR</name>
  <description>Selects, if Reload Register number is incremented, decremented or not modified</description>
  <bitRange>[27:26]</bitRange>
  <access>read-write</access>
</field>
#[doc = "Field `IDR` reader - Selects, if Reload Register number is incremented, decremented or not modified"]
pub type IDR_R = crate::FieldReader<IDR_A>;
#[doc = "Selects, if Reload Register number is incremented, decremented or not modified\n\nValue on reset: 0"]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(u8)]
pub enum IDR_A {
    #[doc = "0: Selects Reload Register number 0"]
    RELOAD0 = 0,
    #[doc = "1: Selects Reload Register number 1"]
    RELOAD1 = 1,
    #[doc = "2: Selects Reload Register number 2"]
    RELOAD2 = 2,
    #[doc = "3: Selects Reload Register number 3"]
    RELOAD3 = 3,
}

Derived enum

<field>
  <name>IDR</name>
  <description>Selects, if Reload Register number is incremented, decremented or not modified</description>
  <bitRange>[27:26]</bitRange>
  <access>read-write</access>
  <enumeratedValues derivedFrom="RELOAD" />
</field>
#[doc = "Field `IDR` reader - Selects, if Reload Register number is incremented, decremented or not modified"]
pub use RELOAD_R as IDR_R;
#[doc = "Field `IDR` writer - Selects, if Reload Register number is incremented, decremented or not modified"]
pub use RELOAD_W as IDR_W;

https://github.com/rust-embedded/svdtools/pull/159