{"id":13875951,"url":"https://github.com/gwierzchowski/csv-async","last_synced_at":"2026-04-07T04:31:40.218Z","repository":{"id":39642696,"uuid":"295133604","full_name":"gwierzchowski/csv-async","owner":"gwierzchowski","description":"CSV parsing in async context","archived":false,"fork":false,"pushed_at":"2025-05-15T21:55:46.000Z","size":201,"stargazers_count":49,"open_issues_count":5,"forks_count":14,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-14T04:41:24.631Z","etag":null,"topics":["async","concurrent-programming","csv","parser"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gwierzchowski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-13T11:06:32.000Z","updated_at":"2025-09-11T10:39:58.000Z","dependencies_parsed_at":"2024-11-24T03:31:49.551Z","dependency_job_id":"92455540-6118-4d30-8e17-39e8a725c28d","html_url":"https://github.com/gwierzchowski/csv-async","commit_stats":{"total_commits":42,"total_committers":5,"mean_commits":8.4,"dds":0.09523809523809523,"last_synced_commit":"648cdc6ab4e279795a00477ecdeffd4d997d093a"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/gwierzchowski/csv-async","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwierzchowski%2Fcsv-async","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwierzchowski%2Fcsv-async/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwierzchowski%2Fcsv-async/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwierzchowski%2Fcsv-async/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gwierzchowski","download_url":"https://codeload.github.com/gwierzchowski/csv-async/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwierzchowski%2Fcsv-async/sbom","scorecard":{"id":450820,"data":{"date":"2025-08-11","repo":{"name":"github.com/gwierzchowski/csv-async","commit":"1e4ae466ab1b90693f3284ce8ebf5305b69294fc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Code-Review","score":1,"reason":"Found 4/27 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codecov.yml:1","Warn: no topLevel permission defined: .github/workflows/linux.yml:1","Warn: no topLevel permission defined: .github/workflows/macos.yml:1","Warn: no topLevel permission defined: .github/workflows/windows.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codecov.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/gwierzchowski/csv-async/codecov.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/codecov.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/gwierzchowski/csv-async/codecov.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/codecov.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/gwierzchowski/csv-async/codecov.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linux.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/gwierzchowski/csv-async/linux.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/macos.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/gwierzchowski/csv-async/macos.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/windows.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/gwierzchowski/csv-async/windows.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 14 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T08:09:10.891Z","repository_id":39642696,"created_at":"2025-08-19T08:09:10.891Z","updated_at":"2025-08-19T08:09:10.891Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31500397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["async","concurrent-programming","csv","parser"],"created_at":"2024-08-06T06:00:52.120Z","updated_at":"2026-04-07T04:31:40.191Z","avatar_url":"https://github.com/gwierzchowski.png","language":"Rust","funding_links":[],"categories":["Rust","csv"],"sub_categories":[],"readme":"# csv-async\n[![crates.io](https://img.shields.io/crates/v/csv-async)](https://crates.io/crates/csv-async)\n[![](https://img.shields.io/crates/d/csv-async.svg)](https://crates.io/crates/csv-async)\n[![](https://img.shields.io/crates/dv/csv-async.svg)](https://crates.io/crates/csv-async)\n[![Documentation](https://docs.rs/csv-async/badge.svg)](https://docs.rs/csv-async)\n[![Version](https://img.shields.io/badge/rustc-1.61+-ab6000.svg)](https://blog.rust-lang.org/2022/05/19/Rust-1.61.0.html)\n\n[![build status](https://github.com/gwierzchowski/csv-async/workflows/Linux/badge.svg?branch=master\u0026event=push)](https://github.com/gwierzchowski/csv-async/actions?query=workflow%3ALinux)\n[![build status](https://github.com/gwierzchowski/csv-async/workflows/Windows/badge.svg?branch=master\u0026event=push)](https://github.com/gwierzchowski/csv-async/actions?query=workflow%3AWindows)\n[![build status](https://github.com/gwierzchowski/csv-async/workflows/MacOS/badge.svg?branch=master\u0026event=push)](https://github.com/gwierzchowski/csv-async/actions?query=workflow%3AMacOS)\n[![codecov](https://codecov.io/gh/gwierzchowski/csv-async/branch/master/graph/badge.svg)](https://codecov.io/gh/gwierzchowski/csv-async)\n\nThis is CSV library to use in asynchronous environment.\nImplemented API is similar to existing [csv](https://github.com/BurntSushi/rust-csv) crate with few exceptions like builder's `create_` functions instead of `from_` as in `csv`.\n\nSome code is borrowed from `csv` crate (synchronized with version 1.3.3 - Oct 2023).\nThis package shares CSV parsing routines with `csv` by means of using `csv-core` crate.\nMajor version of this crate will be kept in sync with major version of `csv` with which it is API compatible.\n\nCSV files are being read or written by objects of types `AsyncReader` / `AsyncWriter` to / from generic \ntext-based structures or by `AsyncDeserializer` / `AsyncSerializer` to / from data specific structures with generated `serde` interfaces.\n\nLibrary does not contain synchronous reader/writer. If you need it - please use `csv` crate.\n\n## Cargo Features\nFeatures which can be enabled / disabled during library build.\n\n| Feature      | Default | Description |\n|--------------|---------|-------------|\n| `with_serde` | on      | Enables crate to use [serde](https://serde.rs) derive macros |\n| `tokio`      | off     | Enables crate to be used with [tokio](https://tokio.rs) runtime and libraries |\n\nEnabling `tokio` feature allows user to use `tokio::fs::File` and makes `AsyncReader` (`AsyncWriter`) \nto be based on `tokio::io::AsyncRead` (`tokio::io::AsyncWrite`). Currently this crate depends on tokio version 1.25.\n\nWithout `tokio` feature, this crate depends only on `futures` crate and reader (writer) are based on traits `futures::io::AsyncRead` (`futures::io::AsyncWrite`), what allows user to use `async_std::fs::File`.\n\n## Example usage:  \nSample input file:\n```csv\ncity,region,country,population\nSouthborough,MA,United States,9686\nNorthbridge,MA,United States,14061\nMarlborough,MA,United States,38334\nSpringfield,MA,United States,152227\nSpringfield,MO,United States,150443\nSpringfield,NJ,United States,14976\nConcord,NH,United States,42605\n```\n\n```rust\nuse std::error::Error;\nuse std::process;\nuse futures::stream::StreamExt;\nuse async_std::fs::File;\n\nasync fn filter_by_region(region:\u0026str, file_in:\u0026str, file_out:\u0026str) -\u003e Result\u003c(), Box\u003cdyn Error\u003e\u003e {\n    // Function reads CSV file that has column named \"region\" at second position (index = 1).\n    // It writes to new file only rows with region equal to passed argument\n    // and removes region column.\n    let mut rdr = csv_async::AsyncReader::from_reader(\n        File::open(file_in).await?\n    );\n    let mut wri = csv_async::AsyncWriter::from_writer(\n        File::create(file_out).await?\n    );\n    wri.write_record(rdr\n        .headers()\n        .await?.into_iter()\n        .filter(|h| *h != \"region\")\n    ).await?;\n    let mut records = rdr.records();\n    while let Some(record) = records.next().await {\n        let record = record?;\n        match record.get(1) {\n            Some(reg) if reg == region =\u003e \n                wri.write_record(record\n                    .iter()\n                    .enumerate()\n                    .filter(|(i, _)| *i != 1)\n                    .map(|(_, s)| s)\n                ).await?,\n            _ =\u003e {},\n        }\n    }\n    Ok(())\n}\n\nfn main() {\n    async_std::task::block_on(async {\n        if let Err(err) = filter_by_region(\n            \"MA\",\n            \"/tmp/all_regions.csv\",\n            \"/tmp/MA_only.csv\"\n        ).await {\n            eprintln!(\"error running filter_by_region: {}\", err);\n            process::exit(1);\n        }\n    });\n}\n```\n\nFor serde example please see documentation [root](https://docs.rs/csv-async) page.\n\n## Plans\nSome ideas for future development:\n\n- Create benchmarks, maybe some performance improvements.\n- Things marked as TODO in the code.\n- Support for `smol` asynchronous runtime.\n- Create more examples and tutorial.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgwierzchowski%2Fcsv-async","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgwierzchowski%2Fcsv-async","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgwierzchowski%2Fcsv-async/lists"}