3个版本
| 0.1.2 | 2023年1月15日 |
|---|---|
| 0.1.1 | 2022年12月20日 |
| 0.1.0 | 2022年1月15日 |
#2060 在 解析器实现
24KB
332 行
clarion
一个库,通过启用简单的到和从Clarion格式的转换,简化了处理Clarion软件数据格式,包括将Clarion颜色格式转换为RGB格式,以及日期/时间转换为由time库使用/提供的格式。
Clarion日期/时间格式都是基于整数,在该库中表示为
Clarion颜色格式也是一个整数,表示为
还指定了一个标准错误格式,名为ClarionErr,用于处理超出范围的转换和构造器错误(ClarionErr::ConversionOverflowed和ClarionErr::OutOfRange)。
用法
此库提供了四个主要的结构体,ClarionTime、ClarionDate、ClarionColor和RgbColor。
ClarionColor和RgbColor表示24位RGB颜色空间中的颜色,而ClarionTime/ClarionDate分别表示时间和日期值。可以使用构造函数new()创建ClarionDate、ClarionTime和ClarionColor类型,而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()函数,从ClarionTime或ClarionDate值中提取出原始的i32值。
ClarionColor/RgbColor
可以使用from()和into()函数在ClarionColor和RgbColor之间自由转换。
// 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);
可以使用结构体的相应red、green或blue成员访问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