mirror of
https://github.com/AThilenius/axum-connect.git
synced 2025-01-06 18:18:42 +00:00
Add a nasty hack to use re-exported crates. Makes me sad.
This commit is contained in:
parent
2016c0dcc2
commit
bc3c7380dd
5 changed files with 24 additions and 9 deletions
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "axum-connect-build"
|
name = "axum-connect-build"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
authors = ["Alec Thilenius <alec@thilenius.com>"]
|
authors = ["Alec Thilenius <alec@thilenius.com>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
categories = [
|
categories = [
|
||||||
|
|
|
@ -69,9 +69,4 @@ impl ServiceGenerator for AxumConnectServiceGenerator {
|
||||||
fn generate(&mut self, service: Service, buf: &mut String) {
|
fn generate(&mut self, service: Service, buf: &mut String) {
|
||||||
self.generate_service(service, buf);
|
self.generate_service(service, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finalize(&mut self, buf: &mut String) {
|
|
||||||
// Add serde import (because that's less effort than hacking pbjson).
|
|
||||||
buf.push_str("\nuse axum_connect::serde;\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
use std::{
|
use std::{
|
||||||
|
cell::RefCell,
|
||||||
env,
|
env,
|
||||||
io::{BufWriter, Write},
|
io::{BufWriter, Write},
|
||||||
|
ops::Deref,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
|
rc::Rc,
|
||||||
};
|
};
|
||||||
|
|
||||||
use gen::AxumConnectServiceGenerator;
|
use gen::AxumConnectServiceGenerator;
|
||||||
|
@ -74,7 +77,7 @@ pub fn axum_connect_codegen(settings: AxumConnectGenSettings) -> anyhow::Result<
|
||||||
// Standard prost configuration
|
// Standard prost configuration
|
||||||
conf.compile_well_known_types();
|
conf.compile_well_known_types();
|
||||||
conf.file_descriptor_set_path(&descriptor_path);
|
conf.file_descriptor_set_path(&descriptor_path);
|
||||||
conf.extern_path(".google.protobuf", "::pbjson_types");
|
conf.extern_path(".google.protobuf", "::axum_connect::pbjson_types");
|
||||||
conf.service_generator(Box::new(AxumConnectServiceGenerator::new()));
|
conf.service_generator(Box::new(AxumConnectServiceGenerator::new()));
|
||||||
|
|
||||||
// Arg configuration
|
// Arg configuration
|
||||||
|
@ -91,10 +94,15 @@ pub fn axum_connect_codegen(settings: AxumConnectGenSettings) -> anyhow::Result<
|
||||||
let mut output: PathBuf = PathBuf::from(env::var("OUT_DIR").unwrap());
|
let mut output: PathBuf = PathBuf::from(env::var("OUT_DIR").unwrap());
|
||||||
output.push("FILENAME");
|
output.push("FILENAME");
|
||||||
|
|
||||||
|
// TODO: This is a nasty hack. Get rid of it. Idk how without dumping Prost and pbjson though.
|
||||||
|
let files = Rc::new(RefCell::new(vec![]));
|
||||||
|
|
||||||
|
let files_c = files.clone();
|
||||||
let writers = pbjson_build::Builder::new()
|
let writers = pbjson_build::Builder::new()
|
||||||
.register_descriptors(&descriptor_set)?
|
.register_descriptors(&descriptor_set)?
|
||||||
.generate(&["."], move |package| {
|
.generate(&["."], move |package| {
|
||||||
output.set_file_name(format!("{}.rs", package));
|
output.set_file_name(format!("{}.rs", package));
|
||||||
|
files_c.deref().borrow_mut().push(output.clone());
|
||||||
|
|
||||||
let file = std::fs::OpenOptions::new().append(true).open(&output)?;
|
let file = std::fs::OpenOptions::new().append(true).open(&output)?;
|
||||||
|
|
||||||
|
@ -105,5 +113,14 @@ pub fn axum_connect_codegen(settings: AxumConnectGenSettings) -> anyhow::Result<
|
||||||
writer.flush()?;
|
writer.flush()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now second part of the nasty hack, replace a few namespaces with re-exported ones.
|
||||||
|
for file in files.take().into_iter() {
|
||||||
|
let contents = std::fs::read_to_string(&file)?;
|
||||||
|
let contents = contents.replace("pbjson::", "axum_connect::pbjson::");
|
||||||
|
let contents = contents.replace("prost::", "axum_connect::prost::");
|
||||||
|
let contents = contents.replace("serde::", "axum_connect::serde::");
|
||||||
|
std::fs::write(&file, contents)?;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "axum-connect"
|
name = "axum-connect"
|
||||||
version = "0.1.5"
|
version = "0.1.6"
|
||||||
authors = ["Alec Thilenius <alec@thilenius.com>"]
|
authors = ["Alec Thilenius <alec@thilenius.com>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
categories = [
|
categories = [
|
||||||
|
@ -19,6 +19,7 @@ async-trait = "0.1.64"
|
||||||
axum = "0.6.9"
|
axum = "0.6.9"
|
||||||
futures = "0.3.26"
|
futures = "0.3.26"
|
||||||
pbjson = "0.5.1"
|
pbjson = "0.5.1"
|
||||||
|
pbjson-types = "0.5.1"
|
||||||
prost = "0.11.9"
|
prost = "0.11.9"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
|
|
@ -4,7 +4,9 @@ pub mod parts;
|
||||||
pub mod response;
|
pub mod response;
|
||||||
pub mod router;
|
pub mod router;
|
||||||
|
|
||||||
// Re-export both prost and serde.
|
// Re-export several crates
|
||||||
|
pub use pbjson;
|
||||||
|
pub use pbjson_types;
|
||||||
pub use prost;
|
pub use prost;
|
||||||
pub use serde;
|
pub use serde;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue