#转换 #转换 #capesoft

clarion

一个库,用于简化处理Clarion软件数据格式

3个版本

0.1.2 2023年1月15日
0.1.1 2022年12月20日
0.1.0 2022年1月15日

#2060解析器实现

MIT/Apache

24KB
332

clarion

一个库,通过启用简单的到和从Clarion格式的转换,简化了处理Clarion软件数据格式,包括将Clarion颜色格式转换为RGB格式,以及日期/时间转换为由time库使用/提供的格式。

Clarion日期/时间格式都是基于整数,在该库中表示为。日期指定为给定日期与1800年12月28日之间的天数。时间指定为给定时间与午夜之间的百分之一秒数。

Clarion颜色格式也是一个整数,表示为,然而在实践中,这个数永远不会低于零或高于16,777,215。这个数是BGR格式的十六进制数的十进制表示,例如0xBBGGRR,其中BB是蓝色,GG是绿色,RR是红色。

还指定了一个标准错误格式,名为ClarionErr,用于处理超出范围的转换和构造器错误(ClarionErr::ConversionOverflowedClarionErr::OutOfRange)。

用法

此库提供了四个主要的结构体,ClarionTimeClarionDateClarionColorRgbColor

ClarionColorRgbColor表示24位RGB颜色空间中的颜色,而ClarionTime/ClarionDate分别表示时间和日期值。可以使用构造函数new()创建ClarionDateClarionTimeClarionColor类型,而RgbColor可以使用标准的结构体初始化语法创建

// Create a new ClarionTime value (16:34:00).
let c_time = clarion::ClarionTime::new(5964000);

// Create a new ClarionDate value (2022-01-05).
let c_date = clarion::ClarionDate::new(80727);

// Create a new ClarionColor value (white).
let c_color = clarion::ClarionColor::new(16777215)

ClarionDate/ClarionTime

日期/时间类型可以使用from()/try_from()和/或into()/try_into()函数自由地转换为/从与time兼容的格式。

// Convert `Date` into `ClarionDate` using `from()`.
let date = time::macros::date!(2022-01-05);
let c_date = clarion::ClarionDate::from(date);
assert_eq!(c_date.date(), 80727);

// Convert `ClarionDate` into `Date` using `try_from()`.
let c_date = clarion::ClarionDate::new(80727);
let date = time::Date::try_from(c_date)
    .expect("Value did not represent a date between Date::MAX and Date::MIN.");
assert_eq!(date, time::macros::date!(2022-01-05));

// Convert `ClarionTime` into `Time` using `into()`.
let c_time = clarion::ClarionTime::new(5964000);
let time: time::Time = c_time.into();
assert_eq!(time, time::macros::time!(16:34:00))

转换是完全可逆的

let c_date = clarion::ClarionDate::new(80727);
let date: time::Date = c_date.try_into().unwrap();
let another_c_date: clarion::ClarionDate = date.into();
assert_eq!(another_c_date, c_date);

可以通过使用相应结构体的time()date()函数,从ClarionTimeClarionDate值中提取出原始的i32值。

ClarionColor/RgbColor

可以使用from()into()函数在ClarionColorRgbColor之间自由转换。

// Convert an RgbColor into a ClarionColor.
let color = clarion::RgbColor {red: 255, green: 128, blue: 64};
let c_color = clarion::ClarionColor::from(color);
assert_eq!(c_color.color(), 4227327);
// Convert a ClarionColor into an RgbColor.
let c_color = clarion::ClarionColor::new(4227327).unwrap();
let color = clarion::RgbColor::from(c_color);
let expected_color = clarion::RgbColor {red: 255, green: 128, blue: 64};
assert_eq!(color, expected_color);

可以使用color()函数访问ClarionColor值的整数值。

let c_color = clarion::ClarionColor::new(4259584).unwrap();
assert_eq!(c_color.color(), 4259584);

可以使用结构体的相应redgreenblue成员访问RgbColor值的底层u8值。

let color = clarion::RgbColor { red: 128, green: 64, blue: 0 };
let (red, green, blue) = (color.red, color.green, color.blue);
assert_eq!((red, green, blue), (128, 64, 0));

许可证

该项目可以在以下许可证中选择之一。

任选其一。

除非您明确声明,否则您根据Apache-2.0许可证定义的、有意提交以包含在clarion中的任何贡献,都应按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~745KB
~13K SLoC