automata/ical
RFC 5545 iCalendar parser and emitter built on top of
automata/rrule. Handles the VCALENDAR envelope —
VEVENT / VTODO / VJOURNAL / VFREEBUSY / VTIMEZONE /
VALARM blocks, §3.1 line folding (CRLF/LF tolerant input,
CRLF output, 75-octet UTF-8 boundary on emit), §3.2 quoted
parameter values, §3.3.11 TEXT escaping
(\\, \,, \;, \n/\N), and §3.4 content-line layout.
RRULE values are preserved as automata/rrule.RawRRule so
callers can pipe them through rrule.validate — InvalidRRule
wraps the syntactic rrule/parser.ParseError. Unknown
component kinds round-trip through UnknownComponent rather
than being dropped.
Types
pub type Alarm =
validator.Alarm
pub type Calendar =
validator.Calendar
pub type Event =
validator.Event
pub type FreeBusy =
validator.FreeBusy
pub type IcalError {
UnexpectedEnd(line: Int)
MismatchedBlock(begin: String, end: String, line: Int)
MalformedProperty(line: Int, raw: String)
MalformedParameter(line: Int, raw: String)
MissingVersion
MissingProductId
MissingComponentProperty(component: String, name: String)
InvalidDateTime(name: String, raw: String)
InvalidEscape(raw: String)
InvalidInteger(name: String, raw: String)
InvalidRRule(raw: String, error: parser.ParseError)
DuplicateRRule(component_uid: String)
EmptyInputError
}
Constructors
-
UnexpectedEnd(line: Int) -
MismatchedBlock(begin: String, end: String, line: Int) -
MalformedProperty(line: Int, raw: String) -
MalformedParameter(line: Int, raw: String) -
MissingVersion -
MissingProductId -
MissingComponentProperty(component: String, name: String) -
InvalidDateTime(name: String, raw: String) -
InvalidEscape(raw: String) -
InvalidInteger(name: String, raw: String) -
InvalidRRule(raw: String, error: parser.ParseError) -
DuplicateRRule(component_uid: String) -
EmptyInputError
pub type Journal =
validator.Journal
pub type Timezone =
validator.Timezone
pub type TimezoneRule =
validator.TimezoneRule
pub type Todo =
validator.Todo
pub type UnknownComponent =
validator.UnknownComponent
Values
pub fn add_alarm(
event: validator.Event,
alarm: validator.Alarm,
) -> validator.Event
pub fn add_alarm_attendee(
alarm: validator.Alarm,
value: String,
) -> validator.Alarm
pub fn add_attendee(
event: validator.Event,
value: String,
) -> validator.Event
pub fn add_category(
event: validator.Event,
value: String,
) -> validator.Event
pub fn add_event(
cal: validator.Calendar,
event: validator.Event,
) -> validator.Calendar
pub fn add_exdate(
event: validator.Event,
dt: ast.DateTime,
) -> validator.Event
pub fn add_freebusy(
cal: validator.Calendar,
fb: validator.FreeBusy,
) -> validator.Calendar
pub fn add_freebusy_attendee(
fb: validator.FreeBusy,
value: String,
) -> validator.FreeBusy
pub fn add_freebusy_period(
fb: validator.FreeBusy,
value: String,
) -> validator.FreeBusy
pub fn add_journal(
cal: validator.Calendar,
j: validator.Journal,
) -> validator.Calendar
pub fn add_journal_category(
j: validator.Journal,
value: String,
) -> validator.Journal
pub fn add_rdate(
event: validator.Event,
dt: ast.DateTime,
) -> validator.Event
pub fn add_timezone(
cal: validator.Calendar,
tz: validator.Timezone,
) -> validator.Calendar
pub fn add_timezone_daylight(
tz: validator.Timezone,
rule: validator.TimezoneRule,
) -> validator.Timezone
pub fn add_timezone_standard(
tz: validator.Timezone,
rule: validator.TimezoneRule,
) -> validator.Timezone
pub fn add_todo(
cal: validator.Calendar,
t: validator.Todo,
) -> validator.Calendar
pub fn add_todo_alarm(
t: validator.Todo,
alarm: validator.Alarm,
) -> validator.Todo
pub fn add_todo_category(
t: validator.Todo,
value: String,
) -> validator.Todo
pub fn add_todo_exdate(
t: validator.Todo,
dt: ast.DateTime,
) -> validator.Todo
pub fn add_todo_rdate(
t: validator.Todo,
dt: ast.DateTime,
) -> validator.Todo
pub fn add_unknown_component(
cal: validator.Calendar,
component: validator.UnknownComponent,
) -> validator.Calendar
pub fn alarm_action(a: validator.Alarm) -> String
pub fn alarm_attendees(a: validator.Alarm) -> List(String)
pub fn alarm_description(
a: validator.Alarm,
) -> option.Option(String)
pub fn alarm_duration(
a: validator.Alarm,
) -> option.Option(String)
pub fn alarm_repeat(a: validator.Alarm) -> option.Option(Int)
pub fn alarm_summary(a: validator.Alarm) -> option.Option(String)
pub fn alarm_trigger(a: validator.Alarm) -> String
pub fn alarm_x_properties(
a: validator.Alarm,
) -> dict.Dict(String, String)
pub fn calendar_x_properties(
cal: validator.Calendar,
) -> dict.Dict(String, String)
pub fn calscale(cal: validator.Calendar) -> option.Option(String)
pub fn encode(cal: validator.Calendar) -> String
Render a Calendar back to the RFC 5545 wire format. Output
uses CRLF line terminators and folds at 75 UTF-8 octets.
pub fn event_alarms(
event: validator.Event,
) -> List(validator.Alarm)
pub fn event_attendees(event: validator.Event) -> List(String)
pub fn event_categories(event: validator.Event) -> List(String)
pub fn event_created(
event: validator.Event,
) -> option.Option(ast.DateTime)
pub fn event_description(
event: validator.Event,
) -> option.Option(String)
pub fn event_dtend(
event: validator.Event,
) -> option.Option(ast.DateTime)
pub fn event_dtend_tzid(
event: validator.Event,
) -> option.Option(String)
pub fn event_dtstamp(event: validator.Event) -> ast.DateTime
pub fn event_dtstart(
event: validator.Event,
) -> option.Option(ast.DateTime)
pub fn event_dtstart_tzid(
event: validator.Event,
) -> option.Option(String)
pub fn event_duration(
event: validator.Event,
) -> option.Option(String)
pub fn event_exdates(
event: validator.Event,
) -> List(ast.DateTime)
pub fn event_last_modified(
event: validator.Event,
) -> option.Option(ast.DateTime)
pub fn event_location(
event: validator.Event,
) -> option.Option(String)
pub fn event_organizer(
event: validator.Event,
) -> option.Option(String)
pub fn event_rdates(event: validator.Event) -> List(ast.DateTime)
pub fn event_rrule(
event: validator.Event,
) -> option.Option(ast.RawRRule)
pub fn event_sequence(event: validator.Event) -> Int
pub fn event_status(
event: validator.Event,
) -> option.Option(String)
pub fn event_summary(
event: validator.Event,
) -> option.Option(String)
pub fn event_transparency(
event: validator.Event,
) -> option.Option(String)
pub fn event_uid(event: validator.Event) -> String
pub fn event_url(event: validator.Event) -> option.Option(String)
pub fn event_x_properties(
event: validator.Event,
) -> dict.Dict(String, String)
pub fn events(cal: validator.Calendar) -> List(validator.Event)
pub fn freebusy(
cal: validator.Calendar,
) -> List(validator.FreeBusy)
pub fn freebusy_attendees(fb: validator.FreeBusy) -> List(String)
pub fn freebusy_dtend(
fb: validator.FreeBusy,
) -> option.Option(ast.DateTime)
pub fn freebusy_dtstamp(fb: validator.FreeBusy) -> ast.DateTime
pub fn freebusy_dtstart(
fb: validator.FreeBusy,
) -> option.Option(ast.DateTime)
pub fn freebusy_organizer(
fb: validator.FreeBusy,
) -> option.Option(String)
pub fn freebusy_periods(fb: validator.FreeBusy) -> List(String)
pub fn freebusy_uid(fb: validator.FreeBusy) -> String
pub fn freebusy_x_properties(
fb: validator.FreeBusy,
) -> dict.Dict(String, String)
pub fn journal_categories(j: validator.Journal) -> List(String)
pub fn journal_description(
j: validator.Journal,
) -> option.Option(String)
pub fn journal_dtstamp(j: validator.Journal) -> ast.DateTime
pub fn journal_dtstart(
j: validator.Journal,
) -> option.Option(ast.DateTime)
pub fn journal_status(
j: validator.Journal,
) -> option.Option(String)
pub fn journal_summary(
j: validator.Journal,
) -> option.Option(String)
pub fn journal_uid(j: validator.Journal) -> String
pub fn journal_x_properties(
j: validator.Journal,
) -> dict.Dict(String, String)
pub fn journals(
cal: validator.Calendar,
) -> List(validator.Journal)
pub fn method(cal: validator.Calendar) -> option.Option(String)
pub fn new_alarm(
action action: String,
trigger trigger: String,
) -> validator.Alarm
pub fn new_calendar(
version version: String,
prod_id prod_id: String,
) -> validator.Calendar
pub fn new_event(
uid uid: String,
dtstamp dtstamp: ast.DateTime,
) -> validator.Event
pub fn new_freebusy(
uid uid: String,
dtstamp dtstamp: ast.DateTime,
) -> validator.FreeBusy
pub fn new_journal(
uid uid: String,
dtstamp dtstamp: ast.DateTime,
) -> validator.Journal
pub fn new_timezone(tzid tzid: String) -> validator.Timezone
pub fn new_timezone_rule(
dtstart dtstart: ast.DateTime,
offset_from offset_from: String,
offset_to offset_to: String,
) -> validator.TimezoneRule
pub fn new_todo(
uid uid: String,
dtstamp dtstamp: ast.DateTime,
) -> validator.Todo
pub fn parse(
input: String,
) -> Result(validator.Calendar, IcalError)
Parse an iCalendar document into a validated Calendar. Errors
from the lexer, parser, and validator are mapped into the unified
IcalError type so callers only need one pattern-match.
pub fn product_id(cal: validator.Calendar) -> String
pub fn timezone_daylight(
tz: validator.Timezone,
) -> List(validator.TimezoneRule)
pub fn timezone_last_modified(
tz: validator.Timezone,
) -> option.Option(ast.DateTime)
pub fn timezone_standard(
tz: validator.Timezone,
) -> List(validator.TimezoneRule)
pub fn timezone_tzid(tz: validator.Timezone) -> String
pub fn timezone_tzurl(
tz: validator.Timezone,
) -> option.Option(String)
pub fn timezone_x_properties(
tz: validator.Timezone,
) -> dict.Dict(String, String)
pub fn timezones(
cal: validator.Calendar,
) -> List(validator.Timezone)
pub fn todo_alarms(t: validator.Todo) -> List(validator.Alarm)
pub fn todo_categories(t: validator.Todo) -> List(String)
pub fn todo_completed(
t: validator.Todo,
) -> option.Option(ast.DateTime)
pub fn todo_description(
t: validator.Todo,
) -> option.Option(String)
pub fn todo_dtstamp(t: validator.Todo) -> ast.DateTime
pub fn todo_dtstart(
t: validator.Todo,
) -> option.Option(ast.DateTime)
pub fn todo_due(t: validator.Todo) -> option.Option(ast.DateTime)
pub fn todo_exdates(t: validator.Todo) -> List(ast.DateTime)
pub fn todo_percent_complete(
t: validator.Todo,
) -> option.Option(Int)
pub fn todo_priority(t: validator.Todo) -> option.Option(Int)
pub fn todo_rdates(t: validator.Todo) -> List(ast.DateTime)
pub fn todo_rrule(
t: validator.Todo,
) -> option.Option(ast.RawRRule)
pub fn todo_status(t: validator.Todo) -> option.Option(String)
pub fn todo_summary(t: validator.Todo) -> option.Option(String)
pub fn todo_uid(t: validator.Todo) -> String
pub fn todo_x_properties(
t: validator.Todo,
) -> dict.Dict(String, String)
pub fn todos(cal: validator.Calendar) -> List(validator.Todo)
pub fn unknown_components(
cal: validator.Calendar,
) -> List(validator.UnknownComponent)
pub fn version(cal: validator.Calendar) -> String
pub fn with_alarm_description(
alarm: validator.Alarm,
value: String,
) -> validator.Alarm
pub fn with_alarm_duration(
alarm: validator.Alarm,
value: String,
) -> validator.Alarm
pub fn with_alarm_repeat(
alarm: validator.Alarm,
value: Int,
) -> validator.Alarm
pub fn with_alarm_summary(
alarm: validator.Alarm,
value: String,
) -> validator.Alarm
pub fn with_alarm_x_property(
alarm: validator.Alarm,
name: String,
value: String,
) -> validator.Alarm
pub fn with_calendar_x_property(
cal: validator.Calendar,
name: String,
value: String,
) -> validator.Calendar
pub fn with_calscale(
cal: validator.Calendar,
scale: String,
) -> validator.Calendar
pub fn with_created(
event: validator.Event,
dt: ast.DateTime,
) -> validator.Event
pub fn with_description(
event: validator.Event,
value: String,
) -> validator.Event
pub fn with_dtend(
event: validator.Event,
dt: ast.DateTime,
) -> validator.Event
pub fn with_dtend_tzid(
event: validator.Event,
tzid: String,
) -> validator.Event
pub fn with_dtstart(
event: validator.Event,
dt: ast.DateTime,
) -> validator.Event
pub fn with_dtstart_tzid(
event: validator.Event,
tzid: String,
) -> validator.Event
pub fn with_duration(
event: validator.Event,
value: String,
) -> validator.Event
pub fn with_event_x_property(
event: validator.Event,
name: String,
value: String,
) -> validator.Event
pub fn with_freebusy_dtend(
fb: validator.FreeBusy,
dt: ast.DateTime,
) -> validator.FreeBusy
pub fn with_freebusy_dtstart(
fb: validator.FreeBusy,
dt: ast.DateTime,
) -> validator.FreeBusy
pub fn with_freebusy_organizer(
fb: validator.FreeBusy,
value: String,
) -> validator.FreeBusy
pub fn with_freebusy_x_property(
fb: validator.FreeBusy,
name: String,
value: String,
) -> validator.FreeBusy
pub fn with_journal_description(
j: validator.Journal,
value: String,
) -> validator.Journal
pub fn with_journal_dtstart(
j: validator.Journal,
dt: ast.DateTime,
) -> validator.Journal
pub fn with_journal_status(
j: validator.Journal,
value: String,
) -> validator.Journal
pub fn with_journal_summary(
j: validator.Journal,
value: String,
) -> validator.Journal
pub fn with_journal_x_property(
j: validator.Journal,
name: String,
value: String,
) -> validator.Journal
pub fn with_last_modified(
event: validator.Event,
dt: ast.DateTime,
) -> validator.Event
pub fn with_location(
event: validator.Event,
value: String,
) -> validator.Event
pub fn with_method(
cal: validator.Calendar,
method: String,
) -> validator.Calendar
pub fn with_organizer(
event: validator.Event,
value: String,
) -> validator.Event
pub fn with_rrule(
event: validator.Event,
rule: ast.RawRRule,
) -> validator.Event
pub fn with_sequence(
event: validator.Event,
value: Int,
) -> validator.Event
pub fn with_status(
event: validator.Event,
value: String,
) -> validator.Event
pub fn with_summary(
event: validator.Event,
value: String,
) -> validator.Event
pub fn with_timezone_last_modified(
tz: validator.Timezone,
dt: ast.DateTime,
) -> validator.Timezone
pub fn with_timezone_rule_name(
rule: validator.TimezoneRule,
value: String,
) -> validator.TimezoneRule
pub fn with_timezone_rule_rrule(
rule: validator.TimezoneRule,
value: ast.RawRRule,
) -> validator.TimezoneRule
pub fn with_timezone_url(
tz: validator.Timezone,
value: String,
) -> validator.Timezone
pub fn with_timezone_x_property(
tz: validator.Timezone,
name: String,
value: String,
) -> validator.Timezone
pub fn with_todo_completed(
t: validator.Todo,
dt: ast.DateTime,
) -> validator.Todo
pub fn with_todo_description(
t: validator.Todo,
value: String,
) -> validator.Todo
pub fn with_todo_dtstart(
t: validator.Todo,
dt: ast.DateTime,
) -> validator.Todo
pub fn with_todo_due(
t: validator.Todo,
dt: ast.DateTime,
) -> validator.Todo
pub fn with_todo_percent_complete(
t: validator.Todo,
value: Int,
) -> validator.Todo
pub fn with_todo_priority(
t: validator.Todo,
value: Int,
) -> validator.Todo
pub fn with_todo_rrule(
t: validator.Todo,
rule: ast.RawRRule,
) -> validator.Todo
pub fn with_todo_status(
t: validator.Todo,
value: String,
) -> validator.Todo
pub fn with_todo_summary(
t: validator.Todo,
value: String,
) -> validator.Todo
pub fn with_todo_x_property(
t: validator.Todo,
name: String,
value: String,
) -> validator.Todo
pub fn with_transparency(
event: validator.Event,
value: String,
) -> validator.Event
pub fn with_url(
event: validator.Event,
value: String,
) -> validator.Event