cfg_match! a été ajouté à la bibliothèque standard
#![feature(cfg_match)]
cfg_match! {
cfg(unix) => {
fn foo() { /* unix specific functionality */ }
}
cfg(target_pointer_width = "32") => {
fn foo() { /* non-unix, 32-bit functionality */ }
}
_ => {
fn foo() { /* fallback implementation */ }
}
}
GitHub : https://github.com/rust-lang/rust/pull/115416
cadre d'interface utilisateur multiplateforme viewbuilder
Cette caisse fournit une API de rendu de type HTML pour le backend de l'interface utilisateur. Il est construit spécifiquement comme un backend pour concocter, mais vous pouvez également l'utiliser comme backend pour introduire vos propres outils de gestion d'état ou créer votre propre framework.
Les caractéristiques sont les suivantes :
- Multiplateforme, prend en charge les appareils de bureau et mobiles.
- Possède une API de gestion des événements similaire au HTML.
- Disposition flexible des boîtes et des grilles CSS implémentées à l'aide de Taffy.
- Implémentez la prise en charge de l’accessibilité via accesskit.
- Rendu haute performance utilisant rust-skia.
Exemple d'utilisation :
let mut tree = Tree::default();
let root = Element::new()
.align_items(AlignItems::Center)
.justify_content(JustifyContent::Center)
.child(tree.insert("Hello World!"))
.build(&mut tree);
viewbuilder::run(tree, root)
GitHub : https://github.com/concoct-rs/viewbuilder
fantaisie-durée v0.6.0 publiée
fancy-duration implémente un schéma similaire au time.ParseDuration de Go, générant une durée générale adaptée à tout type pouvant utiliser des secondes et des nanosecondes. Il prend en charge les caisses serde, time et chrono par défaut, et fournit des fonctionnalités que vous pouvez implémenter pour rendre vos propres durées compatibles avec lui et donc avec serde etc. Il fournit des formats compacts et délimités par des espaces.
Exemple d'utilisation :
use std::time::Duration;
use fancy_duration::FancyDuration;
pub fn main() {
assert_eq!(FancyDuration(Duration::new(20, 0)).to_string(), "20s");
assert_eq!(FancyDuration(Duration::new(600, 0)).to_string(), "10m");
assert_eq!(FancyDuration(Duration::new(120, 0)).to_string(), "2m");
assert_eq!(FancyDuration(Duration::new(185, 0)).to_string(), "3m 5s");
assert_eq!(FancyDuration::<Duration>::parse("3m 5s").unwrap().duration(), Duration::new(185, 0));
assert_eq!(FancyDuration(Duration::new(185, 0)).to_string(), "3m 5s");
#[cfg(feature = "time")]
{
// also works with time::Duration from the `time` crate
assert_eq!(FancyDuration(time::Duration::new(20, 0)).to_string(), "20s");
assert_eq!(FancyDuration(time::Duration::new(600, 0)).to_string(), "10m");
assert_eq!(FancyDuration(time::Duration::new(120, 0)).to_string(), "2m");
assert_eq!(FancyDuration(time::Duration::new(185, 0)).to_string(), "3m 5s");
assert_eq!(FancyDuration::<time::Duration>::parse("3m 5s").unwrap().duration(), time::Duration::new(185, 0));
assert_eq!(FancyDuration(time::Duration::new(185, 0)).to_string(), "3m 5s");
}
#[cfg(feature = "chrono")]
{
// also works with chrono!
assert_eq!(FancyDuration(chrono::Duration::seconds(20)).to_string(), "20s");
assert_eq!(FancyDuration(chrono::Duration::seconds(600)).to_string(), "10m");
assert_eq!(FancyDuration(chrono::Duration::seconds(120)).to_string(), "2m");
assert_eq!(FancyDuration(chrono::Duration::seconds(185)).to_string(), "3m 5s");
assert_eq!(FancyDuration::<chrono::Duration>::parse("3m 5s").unwrap().duration(), chrono::Duration::seconds(185));
assert_eq!(FancyDuration(chrono::Duration::seconds(185)).to_string(), "3m 5s");
}
}
GitHub : https://github.com/erikh/fancy-duration
Du chef d'équipe quotidien Qin
Abonnement à la plateforme communautaire d'échange d'apprentissage :
- Forum Rustcc : prise en charge des flux RSS
- Compte public WeChat : communauté chinoise en langue Rust