[![Crates.io](https://img.shields.io/crates/v/ics.svg)](https://crates.io/crates/ics) ![Crates.io](https://img.shields.io/crates/l/rustc-serialize.svg) [![Build Status](https://travis-ci.com/hummingly/ics.svg?branch=master)](https://travis-ci.com/hummingly/ics) [![Documentation](https://docs.rs/ics/badge.svg)](https://docs.rs/ics) A library for creating iCalendar files as specified in [RFC5545](https://tools.ietf.org/html/rfc5545) and [RFC7986](https://tools.ietf.org/html/rfc7986). ## Minimum supported rustc **1.26.0+** This version is officially supported and tested in CI. Changes to the minimum supported version will be noted in the Changelog. ## Installation To use this library add the library as a dependency in your `Cargo.toml`: ```toml [dependencies] ics = "0.5" ``` Optionally you can disable default features. ```toml [dependencies.ics] version = "0.5" default-features = false ``` ## Features - `rfc7986` (enabled by default): adds properties from the newer specification ## Usage ```rust use ics::properties::{Categories, Description, DtEnd, DtStart, Organizer, Status, Summary}; use ics::{escape_text, Event, ICalendar}; fn main() -> std::io::Result<()> { // create new iCalendar object let mut calendar = ICalendar::new("2.0", "-//xyz Corp//NONSGML PDA Calendar Version 1.0//EN"); // create event which contains the information regarding the conference let mut event = Event::new("b68378cf-872d-44f1-9703-5e3725c56e71", "19960704T120000Z"); // add properties event.push(Organizer::new("mailto:jsmith@example.com")); event.push(DtStart::new("19960918T143000Z")); event.push(DtEnd::new("19960920T220000Z")); event.push(Status::confirmed()); event.push(Categories::new("CONFERENCE")); event.push(Summary::new("Networld+Interop Conference")); // Values that are "TEXT" must be escaped (only if the text contains a comma, // semicolon, backslash or newline). event.push(Description::new(escape_text( "Networld+Interop Conference and Exhibit\n\ Atlanta World Congress Center\n\ Atlanta, Georgia" ))); // add event to calendar calendar.add_event(event); // write calendar to file calendar.save_file("event.ics")?; Ok(()) /* inside event.ics BEGIN:VCALENDAR VERSION:2.0 PRODID:-//xyz Corp//NONSGML PDA Calendar Version 1.0//EN BEGIN:VEVENT UID:b68378cf-872d-44f1-9703-5e3725c56e71 DTSTAMP:19960704T120000Z ORGANIZER:mailto:jsmith@example.com DTSTART:19960918T143000Z DTEND:19960920T220000Z STATUS:CONFIRMED CATEGORIES:CONFERENCE SUMMARY:Networld+Interop Conference DESCRIPTION:Networld+Interop Conference and Exhibit Atlanta World Congress Center Atlanta\, Georgia END:VEVENT END:VCALENDAR */ } ``` ## License Licensed under either of - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) - MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) at your option. ## Contribution Contributions are always welcome! Unless 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.