diff --git a/.spelling b/.spelling index bd7694ad0..76eb182dd 100644 --- a/.spelling +++ b/.spelling @@ -335,6 +335,7 @@ freezable frontend fundle gRPC +grpc getter getters github diff --git a/CHANGELOG.md b/CHANGELOG.md index fe6447b49..18ced9dd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ Please see each crate's change log below: - [`data_privacy_macros_impl`](./crates/data_privacy_macros_impl/CHANGELOG.md) - [`fetch`](./crates/fetch/CHANGELOG.md) - [`fetch_azure`](./crates/fetch_azure/CHANGELOG.md) +- [`fetch_grpc`](./crates/fetch_grpc/CHANGELOG.md) - [`fetch_hyper`](./crates/fetch_hyper/CHANGELOG.md) - [`fetch_options`](./crates/fetch_options/CHANGELOG.md) - [`fetch_tls`](./crates/fetch_tls/CHANGELOG.md) diff --git a/Cargo.lock b/Cargo.lock index 75d163941..e0410763d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1357,6 +1357,10 @@ dependencies = [ "tokio", ] +[[package]] +name = "fetch_grpc" +version = "0.1.0" + [[package]] name = "fetch_hyper" version = "0.4.6" diff --git a/Cargo.toml b/Cargo.toml index 4782905b5..ce4de81f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -65,6 +65,7 @@ data_privacy_macros = { path = "crates/data_privacy_macros", default-features = data_privacy_macros_impl = { path = "crates/data_privacy_macros_impl", default-features = false, version = "0.10.3" } fetch = { path = "crates/fetch", default-features = false, version = "0.13.0" } fetch_azure = { path = "crates/fetch_azure", default-features = false, version = "0.3.0" } +fetch_grpc = { path = "crates/fetch_grpc", default-features = false, version = "0.1.0" } fetch_hyper = { path = "crates/fetch_hyper", default-features = false, version = "0.4.6" } fetch_options = { path = "crates/fetch_options", default-features = false, version = "0.2.3" } fetch_tls = { path = "crates/fetch_tls", default-features = false, version = "0.2.5" } diff --git a/README.md b/README.md index 79f605b74..5ca095aac 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ These are the primary crates built out of this repo: - [`data_privacy`](./crates/data_privacy/README.md) - Mechanisms to classify, manipulate, and redact sensitive data. - [`fetch`](./crates/fetch/README.md) - "Universal, composable and resilient HTTP client." - [`fetch_azure`](./crates/fetch_azure/README.md) - Azure SDK HTTP transport backed by the fetch HTTP client. +- [`fetch_grpc`](./crates/fetch_grpc/README.md) - gRPC transport backed by the fetch HTTP client. - [`fetch_hyper`](./crates/fetch_hyper/README.md) - Hyper-based HTTP transport utilities for fetch. - [`fetch_options`](./crates/fetch_options/README.md) - Options types for 'fetch' crate. - [`fundle`](./crates/fundle/README.md) - Compile-time safe dependency injection for Rust. diff --git a/crates/fetch_grpc/CHANGELOG.md b/crates/fetch_grpc/CHANGELOG.md new file mode 100644 index 000000000..825c32f0d --- /dev/null +++ b/crates/fetch_grpc/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog diff --git a/crates/fetch_grpc/Cargo.toml b/crates/fetch_grpc/Cargo.toml new file mode 100644 index 000000000..b35fa6a96 --- /dev/null +++ b/crates/fetch_grpc/Cargo.toml @@ -0,0 +1,28 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +[package] +name = "fetch_grpc" +description = "gRPC transport backed by the fetch HTTP client." +version = "0.1.0" +readme = "README.md" +keywords = ["oxidizer", "grpc", "fetch", "http", "transport"] +categories = ["network-programming"] + +edition.workspace = true +rust-version.workspace = true +authors.workspace = true +license.workspace = true +homepage.workspace = true +include.workspace = true +repository = "https://github.com/microsoft/oxidizer/tree/main/crates/fetch_grpc" + +[package.metadata.docs.rs] +all-features = true + +[dependencies] + +[dev-dependencies] + +[lints] +workspace = true diff --git a/crates/fetch_grpc/README.md b/crates/fetch_grpc/README.md new file mode 100644 index 000000000..41ab20680 --- /dev/null +++ b/crates/fetch_grpc/README.md @@ -0,0 +1,30 @@ +
+ Fetch Grpc Logo + +# Fetch Grpc + +[![crate.io](https://img.shields.io/crates/v/fetch_grpc.svg)](https://crates.io/crates/fetch_grpc) +[![docs.rs](https://docs.rs/fetch_grpc/badge.svg)](https://docs.rs/fetch_grpc) +[![MSRV](https://img.shields.io/crates/msrv/fetch_grpc)](https://crates.io/crates/fetch_grpc) +[![CI](https://github.com/microsoft/oxidizer/actions/workflows/main.yml/badge.svg?event=push)](https://github.com/microsoft/oxidizer/actions/workflows/main.yml) +[![Coverage](https://codecov.io/gh/microsoft/oxidizer/graph/badge.svg?token=FCUG0EL5TI)](https://codecov.io/gh/microsoft/oxidizer) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](../../LICENSE) +This crate was developed as part of the Oxidizer project + +
+ +A gRPC transport backed by the `fetch` HTTP client. + +This crate adapts a `fetch` HTTP client into a transport for the +[`grpc`][__link0] crate, so gRPC calls run over `fetch` and +benefit from its resilience and observability. + +It is currently an empty placeholder. A real implementation will follow. + + +
+ +This crate was developed as part of The Oxidizer Project. Browse this crate's source code. + + + [__link0]: https://docs.rs/grpc diff --git a/crates/fetch_grpc/favicon.ico b/crates/fetch_grpc/favicon.ico new file mode 100644 index 000000000..e8aa25ff1 --- /dev/null +++ b/crates/fetch_grpc/favicon.ico @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9eb58f6eca7bfa5554daab00b06c30bfd0d9d2eabc82d1ed4c9d1cede030f2f3 +size 167984 diff --git a/crates/fetch_grpc/logo.png b/crates/fetch_grpc/logo.png new file mode 100644 index 000000000..8fc9e4be7 --- /dev/null +++ b/crates/fetch_grpc/logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2500d13a5e0017dbfd0c7312411cce10cefdafabcea25692e24b8c0ca283f5f6 +size 10094 diff --git a/crates/fetch_grpc/src/lib.rs b/crates/fetch_grpc/src/lib.rs new file mode 100644 index 000000000..954dd3936 --- /dev/null +++ b/crates/fetch_grpc/src/lib.rs @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#![cfg_attr(docsrs, feature(doc_cfg))] +#![doc(html_logo_url = "https://media.githubusercontent.com/media/microsoft/oxidizer/refs/heads/main/crates/fetch_grpc/logo.png")] +#![doc(html_favicon_url = "https://media.githubusercontent.com/media/microsoft/oxidizer/refs/heads/main/crates/fetch_grpc/favicon.ico")] + +//! A gRPC transport backed by the `fetch` HTTP client. +//! +//! This crate adapts a `fetch` HTTP client into a transport for the +//! [`grpc`](https://docs.rs/grpc) crate, so gRPC calls run over `fetch` and +//! benefit from its resilience and observability. +//! +//! It is currently an empty placeholder. A real implementation will follow.