[−][src]Crate appstream
Appstream
AppStream is a cross-distro effort for enhancing the metadata available about software components in the Linux and free-software ecosystem. One of the project's goals is to make building software-center applications possible, and make interaction with the package sources of a distribution smarter. AppStream provides specifications for meta-information which is shipped by upstream projects and can be consumed by other software. The meta-information includes data which is interesting to display in software centers and is mainly useful for end-users, as well as descriptions about the public interfaces a software component provides, which is mainly useful for developers, 3rd-party software installers and for automatically installing missing components on a distribution, for example missing firmware or mimetype-handlers.
Specifications: https://www.freedesktop.org/software/appstream/docs/
This crate aimes to provide an easy and sane Rust parser of Appstream using quick-xml
Examples
use appstream::Component; use appstream::builders::{ComponentBuilder, ReleaseBuilder}; use appstream::types::TranslatableString; use appstream::enums::{Provide, ProjectUrl}; use url::Url; use chrono::{Utc, TimeZone}; let xml = r"<?xml version='1.0' encoding='UTF-8'?> <component> <id>com.example.foobar</id> <name>Foo Bar</name> <summary>A foo-ish bar</summary> <url type='homepage'>http://www.example.org</url> <metadata_license>CC0-1.0</metadata_license> <provides> <library>libfoobar.so.2</library> <font>foo.ttf</font> <binary>foobar</binary> </provides> <releases> <release version='1.2' date='2015-02-16'/> </releases> <developer_name>FooBar Team</developer_name> </component>"; let c1: Component = quick_xml::de::from_str(&xml).unwrap(); let c2 = ComponentBuilder::new( "com.example.foobar".into(), TranslatableString::with_default("Foo Bar") ) .metadata_license("CC0-1.0".into()) .summary(TranslatableString::with_default("A foo-ish bar")) .url(ProjectUrl::Homepage( Url::parse("http://www.example.org").unwrap(), )) .developer_name(TranslatableString::with_default("FooBar Team")) .provide(Provide::Library("libfoobar.so.2".into())) .provide(Provide::Font("foo.ttf".into())) .provide(Provide::Binary("foobar".into())) .release( ReleaseBuilder::new("1.2") .date(Utc.ymd(2015, 2, 16).and_hms_milli(0, 0, 0, 0)) .build(), ) .build(); assert_eq!(c1, c2);
The library can parse a collection of components as well
use appstream::{Collection, Component}; let collection = Collection::from_path("/var/lib/flatpak/appstream/flathub/x86_64/active/appstream.xml".into()).unwrap(); #[cfg(feature="gzip")] let collection = Collection::from_gzipped("/var/lib/flatpak/appstream/flathub/x86_64/active/appstream.xml.gz".into()).unwrap(); // Find a specific application by id println!("{:#?}", collection.find_by_id("org.gnome.design.Contrast".into())); // Find the list of gedit plugins collection.components.iter() .filter(|c| c.extends.contains(&"org.gnome.gedit".into())) .collect::<Vec<&Component>>();
Re-exports
pub use quick_xml; |
pub use url; |
Modules
builders | |
enums | |
types |
Structs
Collection | |
Component |