Skip to main content
Help improve this documentation

This documentation is still new and evolving. If you spot any mistakes, unclear explanations, or missing details, please open an issue.

Your feedback helps us improve!

ICS operatorsโ€‹

This page lists all operators available in the ics sub-package of ro.

Installโ€‹

First, import the sub-package in your project:

go get -u github.com/samber/ro/plugins/ics
  • Reads events from one or more ICS files and emits them as a stream of VEvent objects.

    import (
    "github.com/samber/ro"
    roics "github.com/samber/ro/plugins/ics"
    ics "github.com/arran4/golang-ical"
    )

    obs := ro.Pipe1(
    roics.NewICSFileReader(
    "calendar1.ics",
    "calendar2.ics",
    "calendar3.ics",
    ),
    ro.Count[*ics.VEvent](),
    )

    sub := obs.Subscribe(ro.PrintObserver[int64]())
    defer sub.Unsubscribe()

    // Next: 183
    // Completed

    Processing individual events

    obs := roics.NewICSFileReader("calendar.ics")

    sub := obs.Subscribe(
    ro.NewObserver(
    func(event *ics.VEvent) {
    summary := event.GetProperty(ics.ComponentPropertySummary)
    if summary != nil {
    fmt.Printf("Event: %s\n", summary.Value)
    }
    },
    func(err error) {
    fmt.Printf("Error: %v\n", err)
    },
    func() {
    fmt.Println("Completed")
    },
    ),
    )
    defer sub.Unsubscribe()

    Error handling

    obs := roics.NewICSFileReader("nonexistent.ics")

    sub := obs.Subscribe(
    ro.NewObserver(
    func(event *ics.VEvent) {
    // Handle successful event reading
    },
    func(err error) {
    // Handle file reading error
    // This could be due to:
    // - File not found
    // - Permission errors
    // - Invalid ICS format
    fmt.Printf("Error: %v\n", err)
    },
    func() {
    // Handle completion
    },
    ),
    )
    defer sub.Unsubscribe()

    Empty file list

    obs := roics.NewICSFileReader() // No files provided

    sub := obs.Subscribe(ro.PrintObserver[*ics.VEvent]())
    defer sub.Unsubscribe()

    // Completed (empty observable)
    Prototype:
    func NewICSFileReader(paths ...string)
  • Reads events from one or more ICS URLs and emits them as a stream of VEvent objects.

    import (
    "github.com/samber/ro"
    roics "github.com/samber/ro/plugins/ics"
    ics "github.com/arran4/golang-ical"
    )

    obs := ro.Pipe1(
    roics.NewICSURLReader(
    "https://raw.githubusercontent.com/samber/ro/refs/heads/main/plugins/ics/testdata/fr-public-holidays-a.ics",
    "https://raw.githubusercontent.com/samber/ro/refs/heads/main/plugins/ics/testdata/fr-public-holidays-b.ics",
    "https://raw.githubusercontent.com/samber/ro/refs/heads/main/plugins/ics/testdata/fr-public-holidays-c.ics",
    ),
    ro.Count[*ics.VEvent](),
    )

    sub := obs.Subscribe(ro.PrintObserver[int64]())
    defer sub.Unsubscribe()

    // Next: 183
    // Completed

    Processing individual events

    obs := roics.NewICSURLReader("https://calendar.google.com/calendar/ical/example%40gmail.com/public/basic.ics")

    sub := obs.Subscribe(
    ro.NewObserver(
    func(event *ics.VEvent) {
    summary := event.GetProperty(ics.ComponentPropertySummary)
    if summary != nil {
    fmt.Printf("Event: %s\n", summary.Value)
    }
    },
    func(err error) {
    fmt.Printf("Error: %v\n", err)
    },
    func() {
    fmt.Println("Completed")
    },
    ),
    )
    defer sub.Unsubscribe()

    Error handling

    obs := roics.NewICSURLReader("https://invalid-url.com/calendar.ics")

    sub := obs.Subscribe(
    ro.NewObserver(
    func(event *ics.VEvent) {
    // Handle successful event reading
    },
    func(err error) {
    // Handle URL reading error
    // This could be due to:
    // - Network errors
    // - Invalid URL
    // - Server errors
    // - Invalid ICS format
    fmt.Printf("Error: %v\n", err)
    },
    func() {
    // Handle completion
    },
    ),
    )
    defer sub.Unsubscribe()

    Empty URL list

    obs := roics.NewICSURLReader() // No URLs provided

    sub := obs.Subscribe(ro.PrintObserver[*ics.VEvent]())
    defer sub.Unsubscribe()

    // Completed (empty observable)
    Prototype:
    func NewICSURLReader(urls ...string)