{"id":16616857,"url":"https://github.com/sebastienrousseau/rssgen","last_synced_at":"2025-10-29T19:31:20.305Z","repository":{"id":257804002,"uuid":"864222442","full_name":"sebastienrousseau/rssgen","owner":"sebastienrousseau","description":"A Rust library for generating, serializing, and deserializing RSS feeds for various RSS versions.","archived":false,"fork":false,"pushed_at":"2024-11-15T06:19:50.000Z","size":1455,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-10T03:45:31.521Z","etag":null,"topics":["content-management","data-formats","parsing","rss","rss-generator","web-programming","xml"],"latest_commit_sha":null,"homepage":"http://doc.rssgen.co/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sebastienrousseau.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/funding.yml","license":"LICENSE-APACHE","code_of_conduct":".github/CODE-OF-CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"sebastienrousseau","custom":"https://paypal.me/wwdseb"}},"created_at":"2024-09-27T18:11:58.000Z","updated_at":"2024-11-15T06:12:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"af87458a-c49f-4ced-accd-013b651dc079","html_url":"https://github.com/sebastienrousseau/rssgen","commit_stats":null,"previous_names":["sebastienrousseau/rssgen"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebastienrousseau%2Frssgen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebastienrousseau%2Frssgen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebastienrousseau%2Frssgen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebastienrousseau%2Frssgen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sebastienrousseau","download_url":"https://codeload.github.com/sebastienrousseau/rssgen/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238882232,"owners_count":19546466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["content-management","data-formats","parsing","rss","rss-generator","web-programming","xml"],"created_at":"2024-10-12T02:14:27.082Z","updated_at":"2025-10-29T19:31:19.901Z","avatar_url":"https://github.com/sebastienrousseau.png","language":"Rust","funding_links":["https://github.com/sponsors/sebastienrousseau","https://paypal.me/wwdseb"],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD033 MD041 --\u003e\n\u003cimg src=\"https://kura.pro/rssgen/images/logos/rssgen.svg\"\nalt=\"RSS Gen logo\" height=\"66\" align=\"right\" /\u003e\n\u003c!-- markdownlint-enable MD033 MD041 --\u003e\n\n# RSS Gen\n\nA comprehensive Rust library for generating, parsing, serializing, and deserializing RSS feeds across various RSS versions.\n\n[![Made With Love][made-with-rust]][14] [![Crates.io][crates-badge]][08] [![lib.rs][libs-badge]][10] [![Docs.rs][docs-badge]][09] [![License][license-badge]][02] [![Build Status][build-badge]][16]\n\n\u003c!-- markdownlint-disable MD033 MD041 --\u003e\n\u003ccenter\u003e\n\u003c!-- markdownlint-enable MD033 MD041 --\u003e\n\n• [Website][01] • [Documentation][09] • [Report Bug][04] • [Request Feature][04] • [Contributing Guidelines][05]\n\n\u003c!-- markdownlint-disable MD033 MD041 --\u003e\n\u003c/center\u003e\n\u003c!-- markdownlint-enable MD033 MD041 --\u003e\n\n## Overview\n\n`rss-gen` is a powerful Rust library designed for working with RSS feeds. It provides functionality for generating, parsing, serializing, and deserializing RSS content across multiple RSS versions. It supports the following RSS versions: RSS 0.90, RSS 0.91, RSS 0.92, RSS 1.0, and RSS 2.0. The library offers a flexible and efficient way to handle RSS feeds in your Rust projects.\n\n## Features\n\n- Support for RSS versions 0.90, 0.91, 0.92, 1.0, and 2.0\n- Generation of RSS feeds from structured data\n- Parsing of existing RSS feeds into structured data\n- Serialization and deserialization of RSS data\n- Extensible elements for managing standard and optional RSS fields\n- Atom link support for modern syndication compatibility\n- Image embedding for RSS feeds\n- Comprehensive error handling and validation\n- Performance-optimized XML processing using quick-xml\n- Convenient macros for RSS generation and data manipulation\n\n## Installation\n\nAdd this to your `Cargo.toml`:\n\n```toml\n[dependencies]\nrss-gen = \"0.0.3\"\n```\n\n## Usage\n\nHere's a basic example of how to use the `rss-gen` library to generate an RSS feed:\n\n```rust\nuse rss_gen::{RssData, RssVersion, generate_rss};\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let rss_data = RssData::new(Some(RssVersion::RSS2_0))\n        .title(\"My Rust Blog\")\n        .link(\"https://myrustblog.com\")\n        .description(\"A blog about Rust programming and tutorials.\");\n\n    match generate_rss(\u0026rss_data) {\n        Ok(rss_feed) =\u003e println!(\"Generated RSS feed:\\n{}\", rss_feed),\n        Err(e) =\u003e eprintln!(\"Error generating RSS feed: {}\", e),\n    }\n\n    Ok(())\n}\n```\n\nFor parsing an existing RSS feed:\n\n```rust\nuse rss_gen::parse_rss;\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let rss_content = r#\"\n        \u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n        \u003crss version=\"2.0\"\u003e\n            \u003cchannel\u003e\n                \u003ctitle\u003eMy Rust Blog\u003c/title\u003e\n                \u003clink\u003ehttps://myrustblog.com\u003c/link\u003e\n                \u003cdescription\u003eA blog about Rust programming and tutorials.\u003c/description\u003e\n            \u003c/channel\u003e\n        \u003c/rss\u003e\n    \"#;\n\n    match parse_rss(rss_content, None) {\n        Ok(parsed_data) =\u003e println!(\"Parsed RSS data: {:?}\", parsed_data),\n        Err(e) =\u003e eprintln!(\"Error parsing RSS feed: {}\", e),\n    }\n\n    Ok(())\n}\n```\n\n## Macros\n\nRSS Gen provides a set of convenient macros to simplify RSS feed generation and data manipulation tasks:\n\n- `macro_generate_rss!`: Generates a complete RSS feed in XML format from a given `RssData` struct.\n- `macro_write_element!`: Writes an individual XML element with a given name and content.\n- `macro_set_rss_data_fields!`: Sets multiple fields of an `RssData` struct in one go.\n- `macro_get_args!`: Retrieves a named argument from a `clap::ArgMatches` object, useful for command-line interfaces.\n- `macro_metadata_option!`: Extracts an option value from metadata, typically used with `HashMap\u003cString, String\u003e`.\n\nRefer to the [documentation][09] for more details on how to use these macros.\n\n## Documentation\n\nFor full API documentation, please visit [docs.rs/rss-gen][09].\n\n## Examples\n\nThe library comes with several examples demonstrating various features:\n\n- `example_data.rs`: Shows how to create and manipulate RSS data structures.\n- `example_error.rs`: Demonstrates error handling in RSS Gen.\n- `example_generator.rs`: Illustrates RSS feed generation for different RSS versions.\n- `example_lib.rs`: Provides general usage examples of the library.\n- `example_macros.rs`: Shows how to use the provided macros.\n- `example_parser.rs`: Demonstrates parsing RSS feeds from XML content.\n- `example_validator.rs`: Illustrates the usage of the RSS feed validator.\n\nTo run an example, use the following command:\n\n```shell\ncargo run --example example_name\n```\n\nReplace `example_name` with the name of the example you want to run (e.g., `example_generator`).\n\n## Benchmarks\n\nThe library includes benchmarks to measure performance. You can run them using:\n\n```shell\ncargo bench\n```\n\n## Supported RSS Versions\n\n- RSS 0.90\n- RSS 0.91\n- RSS 0.92\n- RSS 1.0\n- RSS 2.0\n\n## Rust Version Compatibility\n\nCompiler support: requires `rustc` 1.56.0+\n\n## Examples\n\nTo run the examples, clone the repository and use the following command:\n\n```shell\ncargo run --example example_name\n```\n\nReplace `example_name` with the name of the example you want to run.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n## License\n\nThe project is dual-licensed under the terms of both the MIT license and the Apache License (Version 2.0).\n\n- [Apache License, Version 2.0][02]\n- [MIT license][03]\n\n## Acknowledgments\n\nThis crate wouldn't be possible without the valuable open-source work of others, especially:\n\n- [quick-xml](https://crates.io/crates/quick-xml) for fast XML serialization and deserialization.\n\n[01]: https://rssgen.co \"RSS Gen Website\"\n[02]: https://opensource.org/license/apache-2-0/ \"Apache License, Version 2.0\"\n[03]: https://opensource.org/licenses/MIT \"MIT license\"\n[04]: https://github.com/sebastienrousseau/rssgen/issues \"Issues\"\n[05]: https://github.com/sebastienrousseau/rssgen/blob/main/CONTRIBUTING.md \"Contributing Guidelines\"\n[08]: https://crates.io/crates/rss-gen \"Crates.io\"\n[09]: https://docs.rs/rss-gen \"Docs.rs\"\n[10]: https://lib.rs/crates/rss-gen \"Lib.rs\"\n[14]: https://www.rust-lang.org \"The Rust Programming Language\"\n[16]: https://github.com/sebastienrousseau/rssgen/actions?query=branch%3Amain \"Build Status\"\n\n[build-badge]: https://img.shields.io/github/actions/workflow/status/sebastienrousseau/rssgen/release.yml?branch=main\u0026style=for-the-badge\u0026logo=github \"Build Status\"\n[crates-badge]: https://img.shields.io/crates/v/rss-gen.svg?style=for-the-badge 'Crates.io badge'\n[docs-badge]: https://img.shields.io/docsrs/rss-gen.svg?style=for-the-badge 'Docs.rs badge'\n[libs-badge]: https://img.shields.io/badge/lib.rs-v0.1.0-orange.svg?style=for-the-badge 'Lib.rs badge'\n[license-badge]: https://img.shields.io/crates/l/rss-gen.svg?style=for-the-badge 'License badge'\n[made-with-rust]: https://img.shields.io/badge/rust-f04041?style=for-the-badge\u0026labelColor=c0282d\u0026logo=rust 'Made With Rust badge'\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastienrousseau%2Frssgen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebastienrousseau%2Frssgen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastienrousseau%2Frssgen/lists"}