#iCalendar #ical #ics #calendar

ics

A library for creating iCalendar files as specified in RFC5545 and RFC7986

8 releases

0.3.1 Apr 10, 2019
0.3.0 Feb 26, 2019
0.2.3 Dec 20, 2018
0.2.2 Nov 3, 2018
0.1.1 Oct 30, 2018

#10 in Date and time

Download history 1/week @ 2018-12-27 13/week @ 2019-01-03 4/week @ 2019-01-10 6/week @ 2019-01-17 3/week @ 2019-01-24 1/week @ 2019-01-31 1/week @ 2019-02-07 4/week @ 2019-02-14 12/week @ 2019-02-21 16/week @ 2019-02-28 3/week @ 2019-03-07 5/week @ 2019-03-14 255/week @ 2019-03-21 1/week @ 2019-03-28 10/week @ 2019-04-04

107 downloads per month

MIT/Apache

53KB
1K SLoC

Crates.io Crates.io Build Status Documentation

A library for creating iCalendar files as specified in RFC5545 and 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:

[dependencies]
ics = "0.3"

Optionally you can disable default features.

[dependencies.ics]
version = "0.3"
default-features = false

Features

  • rfc7986 (enabled by default): adds properties from the newer specification

Usage

extern crate ics;

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::new("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 or backlash)
    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("icalendar.ics")?;
    Ok(())

    /* inside icalendar.ics
    BEGIN:VCALENDAR
    PRODID:-//xyz Corp//NONSGML PDA Calendar Version 1.0//EN
    VERSION:2.0
    BEGIN:VEVENT
    CATEGORIES:CONFERENCE
    DESCRIPTION:Networld+Interop Conference and Exhibit
    Atlanta World Congress 
     Center
    Atlanta\, Georgia
    DTEND:19960920T220000Z
    DTSTAMP:19960704T120000Z
    DTSTART:19960918T143000Z
    ORGANIZER:mailto:jsmith@example.com
    STATUS:CONFIRMED
    SUMMARY:Networld+Interop Conference
    UID:b68378cf-872d-44f1-9703-5e3725c56e71
    END:VEVENT
    END:VCALENDAR
    */
}

License

Licensed under either of

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.

No runtime deps