{"id":16802869,"url":"https://github.com/thomask33/kube-quantity-rs","last_synced_at":"2025-10-11T19:17:34.996Z","repository":{"id":146224815,"uuid":"605989493","full_name":"ThomasK33/kube-quantity-rs","owner":"ThomasK33","description":"Kubernetes quantity arithmetics implemented in Rust","archived":false,"fork":false,"pushed_at":"2025-03-17T07:10:12.000Z","size":102,"stargazers_count":3,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-17T08:27:56.386Z","etag":null,"topics":["arithmetic","client","kubernetes","quantity","rust","rust-library"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/kube_quantity","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/ThomasK33.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2023-02-24T10:49:14.000Z","updated_at":"2025-03-17T07:10:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"51c0af06-d8be-4961-9edb-f4e9b244145f","html_url":"https://github.com/ThomasK33/kube-quantity-rs","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThomasK33%2Fkube-quantity-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThomasK33%2Fkube-quantity-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThomasK33%2Fkube-quantity-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThomasK33%2Fkube-quantity-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThomasK33","download_url":"https://codeload.github.com/ThomasK33/kube-quantity-rs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244897985,"owners_count":20528329,"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":["arithmetic","client","kubernetes","quantity","rust","rust-library"],"created_at":"2024-10-13T09:40:55.189Z","updated_at":"2025-10-11T19:17:34.989Z","avatar_url":"https://github.com/ThomasK33.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kube_quantity - Kubernetes Quantity Parser\n\n[![Crates.io](https://img.shields.io/crates/v/kube_quantity)](https://crates.io/crates/kube_quantity)\n\n`kube_quantity` is a library adding arithmetic operations to the [`Quantity`](https://arnavion.github.io/k8s-openapi/v0.17.x/k8s_openapi/apimachinery/pkg/api/resource/struct.Quantity.html#)\ntype from the [`k8s-openapi`](https://crates.io/crates/k8s-openapi) crate.\n\n## Installation\n\nRun the following Cargo command in your project directory to add the latest\nstable version:\n\n```bash\ncargo add kube_quantity\n```\n\nOr add the following line to your Cargo.toml:\n\n```toml\n[dependencies]\nkube_quantity = \"0.9.0\"\n```\n\n## Upgrading\n\nPlease check the [CHANGELOG](https://github.com/ThomasK33/kube-quantity-rs/blob/main/CHANGELOG.md)\nwhen upgrading.\n\n## Usage\n\n## Parsing of quantities\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Parse from \u0026str\nlet quantity = \"1Ki\";\nlet quantity: Result\u003cParsedQuantity, ParseQuantityError\u003e = quantity.try_into();\nassert_eq!(quantity.unwrap().to_string(), \"1Ki\");\n\n// Parse from a String\nlet quantity = String::from(\"2Mi\");\nlet quantity: Result\u003cParsedQuantity, ParseQuantityError\u003e = quantity.try_into();\nassert_eq!(quantity.unwrap().to_string(), \"2Mi\");\n\n// Parse from a `k8s_openapi` Quantity\nlet quantity = Quantity(\"2.5Gi\".to_string());\nlet quantity: Result\u003cParsedQuantity, ParseQuantityError\u003e = quantity.try_into();\nassert_eq!(quantity.unwrap().to_string(), \"2.5Gi\");\n```\n\n### Addition of quantities\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Try parsing k8s quantities\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"1Ki\".to_string()).try_into();\nlet q2: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"2Ki\".to_string()).try_into();\n\n// Add parsed quantities\nlet q3: ParsedQuantity = q1.unwrap() + q2.unwrap();\n// Convert parsed quantity back into a k8s quantity\nlet q3: Quantity = q3.into();\n\nassert_eq!(q3.0, \"3Ki\");\n```\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Try parsing k8s quantities\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"4.2Ki\".to_string()).try_into();\nlet q2: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"2.1Ki\".to_string()).try_into();\n\n// Add parsed quantities\nlet q3: ParsedQuantity = q1.unwrap() + q2.unwrap();\n// Convert parsed quantity back into a k8s quantity\nlet q3: Quantity = q3.into();\n\nassert_eq!(q3.0, \"6.3Ki\");\n```\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"5M\".to_string()).try_into();\nlet q2: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"7M\".to_string()).try_into();\n\nlet mut q1 = q1.unwrap();\nq1 += q2.unwrap();\n\nlet q1: Quantity = q1.into();\n\nassert_eq!(q1.0, \"12M\");\n\n```\n\n### Multiplication of quantities\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Try parsing k8s quantities\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"3k\".to_string()).try_into();\n\n// Multiply parsed quantities\nlet q1: ParsedQuantity = q1.unwrap() * 2;\n// Convert parsed quantity back into a k8s quantity\nlet q2: Quantity = q1.into();\n\nassert_eq!(q2.0, \"6k\");\n```\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Try parsing k8s quantities\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"3k\".to_string()).try_into();\nlet mut q1: ParsedQuantity = q1.unwrap();\n\n// Multiply parsed quantities\nq1 *= 2;\n// Convert parsed quantity back into a k8s quantity\nlet q2: Quantity = q1.into();\n\nassert_eq!(q2.0, \"6k\");\n```\n\n### Division of quantities\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Try parsing k8s quantities\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"4k\".to_string()).try_into();\n\n// Multiply parsed quantities\nlet q1: ParsedQuantity = q1.unwrap() / 2;\n// Convert parsed quantity back into a k8s quantity\nlet q2: Quantity = q1.into();\n\nassert_eq!(q2.0, \"2k\");\n```\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Try parsing k8s quantities\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"3k\".to_string()).try_into();\nlet mut q1: ParsedQuantity = q1.unwrap();\n\n// Multiply parsed quantities\nq1 /= 3;\n// Convert parsed quantity back into a k8s quantity\nlet q2: Quantity = q1.into();\n\nassert_eq!(q2.0, \"1k\");\n```\n\n### Subtraction of quantities\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Try parsing k8s quantities\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"1M\".to_string()).try_into();\nlet q2: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"500k\".to_string()).try_into();\n\n// Subtract parsed quantities\nlet q3: ParsedQuantity = q1.unwrap() - q2.unwrap();\n// Convert parsed quantity back into a k8s quantity\nlet q3: Quantity = q3.into();\n\nassert_eq!(q3.0, \"500k\");\n```\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Try parsing k8s quantities\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"10G\".to_string()).try_into();\nlet q2: Result\u003cParsedQuantity, ParseQuantityError\u003e = Quantity(\"500M\".to_string()).try_into();\n\nlet mut q1 = q1.unwrap();\nq1 -= q2.unwrap();\n\nlet q1: Quantity = q1.into();\n\nassert_eq!(q1.0, \"9500M\");\n```\n\n### Comparison of quantities\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Parse directly from \u0026str\nlet q1 = \"5Ki\";\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = q1.try_into();\nlet q1 = q1.unwrap();\nassert_eq!(q1.to_string(), \"5Ki\");\n\n// Parse from a `k8s_openapi` Quantity\nlet q2 = Quantity(\"2.5Gi\".to_string());\nlet q2: Result\u003cParsedQuantity, ParseQuantityError\u003e = q2.try_into();\nlet q2 = q2.unwrap();\nassert_eq!(q2.to_string(), \"2.5Gi\");\n\n// Compare byte amount equality\nassert!(q1 \u003c q2);\n```\n\n```rust\nuse k8s_openapi::apimachinery::pkg::api::resource::Quantity;\nuse kube_quantity::{ParseQuantityError, ParsedQuantity};\n\n// Parse directly from \u0026str\nlet q1 = \"1Ki\";\nlet q1: Result\u003cParsedQuantity, ParseQuantityError\u003e = q1.try_into();\nlet q1 = q1.unwrap();\nassert_eq!(q1.to_string(), \"1Ki\");\n\n// Parse from a `k8s_openapi` Quantity\nlet q2 = Quantity(\"1024\".to_string());\nlet q2: Result\u003cParsedQuantity, ParseQuantityError\u003e = q2.try_into();\nlet q2 = q2.unwrap();\nassert_eq!(q2.to_string(), \"1024\");\n\n// Compare byte amount equality\nassert_eq!(q1, q2);\n```\n\n## License\n\nApache 2.0 licensed. See [LICENSE](https://github.com/ThomasK33/kube-quantity-rs/blob/main/LICENSE)\nfor details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomask33%2Fkube-quantity-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthomask33%2Fkube-quantity-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomask33%2Fkube-quantity-rs/lists"}