{"id":28459927,"url":"https://github.com/pimalaya/io-vdir","last_synced_at":"2026-03-02T03:32:14.574Z","repository":{"id":290568849,"uuid":"974888253","full_name":"pimalaya/io-vdir","owner":"pimalaya","description":"Set of I/O-free Rust coroutines to manage Vdir filesystems","archived":false,"fork":false,"pushed_at":"2025-10-27T09:07:19.000Z","size":72,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-27T10:36:22.420Z","etag":null,"topics":["coroutine","directory","file","filesystem","fs","ical","ics","io-free","library","rust","sans-io","vcard","vcf","vdir"],"latest_commit_sha":null,"homepage":"https://docs.rs/io-vdir/latest/io_vdir","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/pimalaya.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"soywod","ko_fi":"soywod","buy_me_a_coffee":"soywod","liberapay":"soywod","thanks_dev":"soywod","custom":"https://www.paypal.com/paypalme/soywod"}},"created_at":"2025-04-29T13:06:38.000Z","updated_at":"2025-10-27T09:07:23.000Z","dependencies_parsed_at":"2025-04-29T14:28:05.391Z","dependency_job_id":"b97e8bbb-2762-412b-a70d-c5a34ef2167e","html_url":"https://github.com/pimalaya/io-vdir","commit_stats":null,"previous_names":["pimalaya/vdir","pimalaya/io-vdir"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/pimalaya/io-vdir","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fio-vdir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fio-vdir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fio-vdir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fio-vdir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pimalaya","download_url":"https://codeload.github.com/pimalaya/io-vdir/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fio-vdir/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29991764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T01:47:34.672Z","status":"online","status_checked_at":"2026-03-02T02:00:07.342Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["coroutine","directory","file","filesystem","fs","ical","ics","io-free","library","rust","sans-io","vcard","vcf","vdir"],"created_at":"2025-06-07T01:39:25.143Z","updated_at":"2026-03-02T03:32:14.568Z","avatar_url":"https://github.com/pimalaya.png","language":"Rust","funding_links":["https://github.com/sponsors/soywod","https://ko-fi.com/soywod","https://buymeacoffee.com/soywod","https://liberapay.com/soywod","https://thanks.dev/soywod","https://www.paypal.com/paypalme/soywod","https://www.buymeacoffee.com/soywod","https://img.shields.io/badge/-thanks.dev-000000?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQuMDk3IiBoZWlnaHQ9IjE3LjU5NyIgY2xhc3M9InctMzYgbWwtMiBsZzpteC0wIHByaW50Om14LTAgcHJpbnQ6aW52ZXJ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05Ljc4MyAxNy41OTdINy4zOThjLTEuMTY4IDAtMi4wOTItLjI5Ny0yLjc3My0uODktLjY4LS41OTMtMS4wMi0xLjQ2Mi0xLjAyLTIuNjA2di0xLjM0NmMwLTEuMDE4LS4yMjctMS43NS0uNjc4LTIuMTk1LS40NTItLjQ0Ni0xLjIzMi0uNjY5LTIuMzQtLjY2OUgwVjcuNzA1aC41ODdjMS4xMDggMCAxLjg4OC0uMjIyIDIuMzQtLjY2OC40NTEtLjQ0Ni42NzctMS4xNzcuNjc3LTIuMTk1VjMuNDk2YzAtMS4xNDQuMzQtMi4wMTMgMS4wMjEtMi42MDZDNS4zMDUuMjk3IDYuMjMgMCA3LjM5OCAwaDIuMzg1djEuOTg3aC0uOTg1Yy0uMzYxIDAtLjY4OC4wMjctLjk4LjA4MmExLjcxOSAxLjcxOSAwIDAgMC0uNzM2LjMwN2MtLjIwNS4xNTYtLjM1OC4zODQtLjQ2LjY4Mi0uMTAzLjI5OC0uMTU0LjY4Mi0uMTU0IDEuMTUxVjUuMjNjMCAuODY3LS4yNDkgMS41ODYtLjc0NSAyLjE1NS0uNDk3LjU2OS0xLjE1OCAxLjAwNC0xLjk4MyAxLjMwNXYuMjE3Yy44MjUuMyAxLjQ4Ni43MzYgMS45ODMgMS4zMDUuNDk2LjU3Ljc0NSAxLjI4Ny43NDUgMi4xNTR2MS4wMjFjMCAuNDcuMDUxLjg1NC4xNTMgMS4xNTIuMTAzLjI5OC4yNTYuNTI1LjQ2MS42ODIuMTkzLjE1Ny40MzcuMjYuNzMyLjMxMi4yOTUuMDUuNjIzLjA3Ni45ODQuMDc2aC45ODVabTE0LjMxNC03LjcwNmgtLjU4OGMtMS4xMDggMC0xLjg4OC4yMjMtMi4zNC42NjktLjQ1LjQ0NS0uNjc3IDEuMTc3LS42NzcgMi4xOTVWMTQuMWMwIDEuMTQ0LS4zNCAyLjAxMy0xLjAyIDIuNjA2LS42OC41OTMtMS42MDUuODktMi43NzQuODloLTIuMzg0di0xLjk4OGguOTg0Yy4zNjIgMCAuNjg4LS4wMjcuOTgtLjA4LjI5Mi0uMDU1LjUzOC0uMTU3LjczNy0uMzA4LjIwNC0uMTU3LjM1OC0uMzg0LjQ2LS42ODIuMTAzLS4yOTguMTU0LS42ODIuMTU0LTEuMTUydi0xLjAyYzAtLjg2OC4yNDgtMS41ODYuNzQ1LTIuMTU1LjQ5Ny0uNTcgMS4xNTgtMS4wMDQgMS45ODMtMS4zMDV2LS4yMTdjLS44MjUtLjMwMS0xLjQ4Ni0uNzM2LTEuOTgzLTEuMzA1LS40OTctLjU3LS43NDUtMS4yODgtLjc0NS0yLjE1NXYtMS4wMmMwLS40Ny0uMDUxLS44NTQtLjE1NC0xLjE1Mi0uMTAyLS4yOTgtLjI1Ni0uNTI2LS40Ni0uNjgyYTEuNzE5IDEuNzE5IDAgMCAwLS43MzctLjMwNyA1LjM5NSA1LjM5NSAwIDAgMC0uOTgtLjA4MmgtLjk4NFYwaDIuMzg0YzEuMTY5IDAgMi4wOTMuMjk3IDIuNzc0Ljg5LjY4LjU5MyAxLjAyIDEuNDYyIDEuMDIgMi42MDZ2MS4zNDZjMCAxLjAxOC4yMjYgMS43NS42NzggMi4xOTUuNDUxLjQ0NiAxLjIzMS42NjggMi4zNC42NjhoLjU4N3oiIGZpbGw9IiNmZmYiLz48L3N2Zz4="],"categories":[],"sub_categories":[],"readme":"# I/O Vdir [![Documentation](https://img.shields.io/docsrs/io-vdir)](https://docs.rs/io-vdir/latest/io_vdir) [![Matrix](https://img.shields.io/matrix/pimalaya:matrix.org?color=success\u0026label=chat)](https://matrix.to/#/#pimalaya:matrix.org)\n\nSet of **I/O-free** Rust coroutines to manage [Vdir](https://vdirsyncer.pimutils.org/en/stable/vdir.html) filesystems, based on [io-fs](https://github.com/pimalaya/io-fs).\n\nThis library allows you to manage vCard files (.vcf) and iCal (.ics) files inside [Vdir](https://vdirsyncer.pimutils.org/en/stable/vdir.html) filesystems using an I/O-agnostic approach, based on 3 concepts:\n\n### Coroutine\n\nA coroutine is an *I/O-free*, *resumable* and *composable* state machine that **emits I/O requests**. A coroutine is considered *terminated* when it does not emit I/O requests anymore.\n\n*See available coroutines at [./src/coroutines](https://github.com/pimalaya/io-vdir/tree/master/src/coroutines).*\n\n### Runtime\n\nA runtime contains all the I/O logic, and is responsible for **processing I/O requests** emitted by coroutines.\n\n*See available runtimes at [io-fs](https://github.com/pimalaya/io-fs/tree/master/src/runtimes).*\n\n### Loop\n\nThe loop is the glue between coroutines and runtimes. It makes the coroutine progress while allowing runtime to process I/O.\n\n## Examples\n\n### List collections synchronously\n\n```rust,ignore\nuse std::{path::PathBuf};\n\nuse io_fs::runtimes::std::handle;\nuse io_vdir::coroutines::list_collections::{ListCollections, ListCollectionsResult};\n\nlet mut arg = None;\nlet mut coroutine = ListCollections::new(\"/path/to/collections\");\n\nlet collections = loop {\n    match coroutine.resume(arg) {\n        ListCollectionsResult::Ok(collections) =\u003e break collections,\n        ListCollectionsResult::Err(err) =\u003e panic!(\"{err}\"),\n        ListCollectionsResult::Io(io) =\u003e arg = Some(handle(io).unwrap()),\n    }\n};\n\nprintln!(\"Collection paths:\");\n\nfor collection in collections {\n    println!(\" - {}\", collection.path.display());\n}\n```\n\n*See complete examples at [./examples](https://github.com/pimalaya/io-vdir/blob/master/examples).*\n\n## More examples\n\nHave a look at projects built on the top of this library:\n\n- [io-addressbook](https://github.com/pimalaya/io-addressbook): Set of I/O-free Rust coroutines to manage contacts.\n- [io-calendar](https://github.com/pimalaya/io-calendar): Set of I/O-free Rust coroutines to manage calendars.\n- [Cardamum](https://github.com/pimalaya/cardamum): CLI to manage contacts.\n- [Calendula](https://github.com/pimalaya/calendula): CLI to manage calendars.\n\n## License\n\nThis project is licensed under either of:\n\n- [MIT license](LICENSE-MIT)\n- [Apache License, Version 2.0](LICENSE-APACHE)\n\nat your option.\n\n## Sponsoring\n\n[![nlnet](https://nlnet.nl/logo/banner-160x60.png)](https://nlnet.nl/)\n\nSpecial thanks to the [NLnet foundation](https://nlnet.nl/) and the [European Commission](https://www.ngi.eu/) that helped the project to receive financial support from various programs:\n\n- [NGI Assure](https://nlnet.nl/project/Himalaya/) in 2022\n- [NGI Zero Entrust](https://nlnet.nl/project/Pimalaya/) in 2023\n- [NGI Zero Core](https://nlnet.nl/project/Pimalaya-PIM/) in 2024 *(still ongoing)*\n\nIf you appreciate the project, feel free to donate using one of the following providers:\n\n[![GitHub](https://img.shields.io/badge/-GitHub%20Sponsors-fafbfc?logo=GitHub%20Sponsors)](https://github.com/sponsors/soywod)\n[![Ko-fi](https://img.shields.io/badge/-Ko--fi-ff5e5a?logo=Ko-fi\u0026logoColor=ffffff)](https://ko-fi.com/soywod)\n[![Buy Me a Coffee](https://img.shields.io/badge/-Buy%20Me%20a%20Coffee-ffdd00?logo=Buy%20Me%20A%20Coffee\u0026logoColor=000000)](https://www.buymeacoffee.com/soywod)\n[![Liberapay](https://img.shields.io/badge/-Liberapay-f6c915?logo=Liberapay\u0026logoColor=222222)](https://liberapay.com/soywod)\n[![thanks.dev](https://img.shields.io/badge/-thanks.dev-000000?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQuMDk3IiBoZWlnaHQ9IjE3LjU5NyIgY2xhc3M9InctMzYgbWwtMiBsZzpteC0wIHByaW50Om14LTAgcHJpbnQ6aW52ZXJ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05Ljc4MyAxNy41OTdINy4zOThjLTEuMTY4IDAtMi4wOTItLjI5Ny0yLjc3My0uODktLjY4LS41OTMtMS4wMi0xLjQ2Mi0xLjAyLTIuNjA2di0xLjM0NmMwLTEuMDE4LS4yMjctMS43NS0uNjc4LTIuMTk1LS40NTItLjQ0Ni0xLjIzMi0uNjY5LTIuMzQtLjY2OUgwVjcuNzA1aC41ODdjMS4xMDggMCAxLjg4OC0uMjIyIDIuMzQtLjY2OC40NTEtLjQ0Ni42NzctMS4xNzcuNjc3LTIuMTk1VjMuNDk2YzAtMS4xNDQuMzQtMi4wMTMgMS4wMjEtMi42MDZDNS4zMDUuMjk3IDYuMjMgMCA3LjM5OCAwaDIuMzg1djEuOTg3aC0uOTg1Yy0uMzYxIDAtLjY4OC4wMjctLjk4LjA4MmExLjcxOSAxLjcxOSAwIDAgMC0uNzM2LjMwN2MtLjIwNS4xNTYtLjM1OC4zODQtLjQ2LjY4Mi0uMTAzLjI5OC0uMTU0LjY4Mi0uMTU0IDEuMTUxVjUuMjNjMCAuODY3LS4yNDkgMS41ODYtLjc0NSAyLjE1NS0uNDk3LjU2OS0xLjE1OCAxLjAwNC0xLjk4MyAxLjMwNXYuMjE3Yy44MjUuMyAxLjQ4Ni43MzYgMS45ODMgMS4zMDUuNDk2LjU3Ljc0NSAxLjI4Ny43NDUgMi4xNTR2MS4wMjFjMCAuNDcuMDUxLjg1NC4xNTMgMS4xNTIuMTAzLjI5OC4yNTYuNTI1LjQ2MS42ODIuMTkzLjE1Ny40MzcuMjYuNzMyLjMxMi4yOTUuMDUuNjIzLjA3Ni45ODQuMDc2aC45ODVabTE0LjMxNC03LjcwNmgtLjU4OGMtMS4xMDggMC0xLjg4OC4yMjMtMi4zNC42NjktLjQ1LjQ0NS0uNjc3IDEuMTc3LS42NzcgMi4xOTVWMTQuMWMwIDEuMTQ0LS4zNCAyLjAxMy0xLjAyIDIuNjA2LS42OC41OTMtMS42MDUuODktMi43NzQuODloLTIuMzg0di0xLjk4OGguOTg0Yy4zNjIgMCAuNjg4LS4wMjcuOTgtLjA4LjI5Mi0uMDU1LjUzOC0uMTU3LjczNy0uMzA4LjIwNC0uMTU3LjM1OC0uMzg0LjQ2LS42ODIuMTAzLS4yOTguMTU0LS42ODIuMTU0LTEuMTUydi0xLjAyYzAtLjg2OC4yNDgtMS41ODYuNzQ1LTIuMTU1LjQ5Ny0uNTcgMS4xNTgtMS4wMDQgMS45ODMtMS4zMDV2LS4yMTdjLS44MjUtLjMwMS0xLjQ4Ni0uNzM2LTEuOTgzLTEuMzA1LS40OTctLjU3LS43NDUtMS4yODgtLjc0NS0yLjE1NXYtMS4wMmMwLS40Ny0uMDUxLS44NTQtLjE1NC0xLjE1Mi0uMTAyLS4yOTgtLjI1Ni0uNTI2LS40Ni0uNjgyYTEuNzE5IDEuNzE5IDAgMCAwLS43MzctLjMwNyA1LjM5NSA1LjM5NSAwIDAgMC0uOTgtLjA4MmgtLjk4NFYwaDIuMzg0YzEuMTY5IDAgMi4wOTMuMjk3IDIuNzc0Ljg5LjY4LjU5MyAxLjAyIDEuNDYyIDEuMDIgMi42MDZ2MS4zNDZjMCAxLjAxOC4yMjYgMS43NS42NzggMi4xOTUuNDUxLjQ0NiAxLjIzMS42NjggMi4zNC42NjhoLjU4N3oiIGZpbGw9IiNmZmYiLz48L3N2Zz4=)](https://thanks.dev/soywod)\n[![PayPal](https://img.shields.io/badge/-PayPal-0079c1?logo=PayPal\u0026logoColor=ffffff)](https://www.paypal.com/paypalme/soywod)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpimalaya%2Fio-vdir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpimalaya%2Fio-vdir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpimalaya%2Fio-vdir/lists"}