patch-svd 0.1.0

Load and patch svd files.
Documentation
mod utils;

use patch_svd::get_patched_svd;
use patch_svd::output::*;

#[test]
fn test_sparse_peripheral() {
    let result = get_patched_svd(utils::SPARSE_PERIPHERAL.to_string(), "".to_string());
    let device = utils::get_sparse_peripheral(None);
    assert_eq!(result.unwrap(), device);
}

#[test]
fn test_sparse_patched_peripheral() {
    let patch = r#"
    device:
        peripherals:
            $modify:
                peripheral:
                    name: PERIPHERAL_NAME_1
                    baseAddress: 1234
                    registerProperties: ""
    "#;
    let result = get_patched_svd(utils::SPARSE_DEVICE.to_string(), patch.to_string());
    let device = utils::get_sparse_peripheral(None);
    assert_eq!(result.unwrap(), device);
}

#[test]
fn test_general_patched_peripheral() {
    let patch = r#"
    device:
        peripherals:
            $modify:
                peripheral:
                    derivedFrom: OtherPeripheral
                    dim: 33
                    dimIncrement: 44
                    dimIndex: 55
                    dimName: DimName
                    dimArrayIndex:
                        - headerEnumName: HeaderEnumName
                        - +enumeratedValue:
                            name: NameOne
                            description: DescriptionOne
                            value:
                                value: 66
                        - +enumeratedValue:
                            name: NameTwo
                            description: DescriptionTwo
                            value: default
                    name: PERIPHERAL_NAME_2
                    version: Version2
                    description: Description2
                    alternatePeripheral: AlternatePeripheral2
                    groupName: GroupName2
                    prependToName: Prefix2
                    appendToName: Postfix2
                    headerStructName: HeaderStruct2
                    disableCondition: SomeDisableCondition2
                    baseAddress: 4321
                    size: 66
                    access: read-writeOnce
                    protection: n
                    resetValue: 77
                    resetMask: 88
                    addressBlock:
                        offset: 99
                        size: 111
                        usage: registers
                        protection: s
    "#;
    let result = get_patched_svd(utils::SPARSE_DEVICE.to_string(), patch.to_string());
    let mut device = utils::get_sparse_device();
    device.peripherals = Peripherals {
        peripheral: vec![Peripheral {
            derived_from: Some("OtherPeripheral".to_string()),
            dim: Some(SvdConstant { value: 33 }),
            dim_increment: Some(SvdConstant { value: 44 }),
            dim_index: Some(SvdConstant { value: 55 }),
            dim_name: Some("DimName".to_string()),
            dim_array_index: Some(DimArrayIndex {
                header_enum_name: Some("HeaderEnumName".to_string()),
                enumerated_value: vec![
                    EnumeratedValue {
                        name: "NameOne".to_string(),
                        description: "DescriptionOne".to_string(),
                        value: EnumValue::Value(SvdConstant { value: 66 }),
                    },
                    EnumeratedValue {
                        name: "NameTwo".to_string(),
                        description: "DescriptionTwo".to_string(),
                        value: EnumValue::Default,
                    },
                ],
            }),
            name: "PERIPHERAL_NAME_2".to_string(),
            version: Some("Version2".to_string()),
            description: Some("Description2".to_string()),
            alternate_peripheral: Some("AlternatePeripheral2".to_string()),
            group_name: Some("GroupName2".to_string()),
            prepend_to_name: Some("Prefix2".to_string()),
            append_to_name: Some("Postfix2".to_string()),
            header_struct_name: Some("HeaderStruct2".to_string()),
            disable_condition: Some("SomeDisableCondition2".to_string()),
            base_address: SvdConstant { value: 4321 },
            size: Some(SvdConstant { value: 66 }),
            access: Some(AccessType::ReadWriteOnce),
            protection: Some(Protection::NonSecure),
            reset_value: Some(SvdConstant { value: 77 }),
            reset_mask: Some(SvdConstant { value: 88 }),
            address_block: Some(AddressBlock {
                offset: SvdConstant { value: 99 },
                size: SvdConstant { value: 111 },
                usage: AddressBlockUsage::Registers,
                protection: Some(Protection::Secure),
            }),
            interrupt: None,
            registers: None,
        }],
    };
    assert_eq!(result.unwrap(), device);
}