{"id":16714198,"url":"https://github.com/flier/rust-mime-sniffer","last_synced_at":"2025-04-04T18:02:37.678Z","repository":{"id":56324743,"uuid":"77880957","full_name":"flier/rust-mime-sniffer","owner":"flier","description":"Detecting mime types base on content sniffer","archived":false,"fork":false,"pushed_at":"2024-12-01T09:04:25.000Z","size":36,"stargazers_count":33,"open_issues_count":0,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-28T17:02:00.039Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/flier.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":"2017-01-03T03:31:18.000Z","updated_at":"2025-03-08T01:42:00.000Z","dependencies_parsed_at":"2024-10-26T21:10:35.912Z","dependency_job_id":"cf7e25dc-2da0-4b5d-b806-2aed0872d6ec","html_url":"https://github.com/flier/rust-mime-sniffer","commit_stats":{"total_commits":20,"total_committers":4,"mean_commits":5.0,"dds":"0.15000000000000002","last_synced_commit":"b841dba4619361cff9ed00a34c1580e4ea7f70f7"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flier%2Frust-mime-sniffer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flier%2Frust-mime-sniffer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flier%2Frust-mime-sniffer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flier%2Frust-mime-sniffer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flier","download_url":"https://codeload.github.com/flier/rust-mime-sniffer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226211,"owners_count":20904465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-10-12T20:49:50.820Z","updated_at":"2025-04-04T18:02:37.637Z","avatar_url":"https://github.com/flier.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"## mime-sniffer [![ci](https://github.com/flier/rust-mime-sniffer/actions/workflows/ci.yml/badge.svg?event=push)](https://github.com/flier/rust-mime-sniffer/actions/workflows/ci.yml) [![crate](https://img.shields.io/crates/v/mime_sniffer.svg)](https://crates.io/crates/mime_sniffer)\n\nDetecting mime types base on content sniffer.\n\n[Document](https://docs.rs/mime-sniffer/)\n\n***The detection workflow was copied from [Chromium](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/net/base/mime_sniffer.cc)***\n\nFor more detail, please read [How Mozilla determines MIME Types](https://developer.mozilla.org/en-US/docs/Mozilla/How_Mozilla_determines_MIME_Types).\n\n## Usage\n\nTo use `mime-sniffer`, first add this to your `Cargo.toml`:\n\n```toml\n[dependencies]\nmime-sniffer = \"^0.1\"\n```\n\nThen, add this to your crate root:\n\n```rust\nextern crate mime_sniffer;\n\nuse mime_sniffer::MimeTypeSniffer;\n```\n\nAnd then, use hash function with module or hasher\n\n```rust\nuse mime_sniffer::MimeTypeSniffer;\n\nassert_eq!(Some(\"application/pdf\"), b\"%PDF-1.5\".sniff_mime_type());\n```\n\n## Examples\n\n```rust\nextern crate url;\n#[macro_use]\nextern crate mime;\nextern crate mime_sniffer;\n\nuse url::Url;\n\nuse mime_sniffer::{HttpRequest, MimeTypeSniffer, MimeTypeSniffable, MimeTypeSnifferExt};\n\nlet url = Url::parse(\"http://localhost/notes.ppt\").unwrap();\nlet req = HttpRequest {\n    content: b\"\\xD0\\xCF\\x11\\xE0\\xA1\\xB1\\x1A\\xE1\",\n    url: \u0026url,\n    type_hint: \"text/plain\",\n};\n\nassert!(req.should_sniff_mime_type());\nassert_eq!(req.sniff_mime_type(), Some(\"application/vnd.ms-powerpoint\"));\nassert_eq!(req.sniff_mime_type_ext().unwrap().type_(), mime::APPLICATION);\n```\n\n## Related\n\n* To recognize binary file type, you may need [libmagic](https://linux.die.net/man/3/libmagic) with rust binding [rust-magic](https://github.com/robo9k/rust-magic) crate. [![crate](https://img.shields.io/crates/v/magic.svg)](https://crates.io/crates/magic)\n* To guess MIME type by file extension, you may need [mime_guess](https://github.com/abonander/mime_guess) crate. [![crate](https://img.shields.io/crates/v/mime_guess.svg)](https://crates.io/crates/mime_guess)\n* To manage MIME type as strong types, you may need [mime.rs](https://github.com/hyperium/mime.rs) crate. [![crate](https://img.shields.io/crates/v/mime.svg)](https://crates.io/crates/mime)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflier%2Frust-mime-sniffer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflier%2Frust-mime-sniffer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflier%2Frust-mime-sniffer/lists"}