mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-20 16:02:19 +00:00
feat(rust): add rust sdk (#5909)
* upload client * add gh workflow * refactor build script * remove dbg! * fix async * remove unused * update dev.nu * update CI * fix ci * fixin tests * fixes + tests
This commit is contained in:
Executable
+81
@@ -0,0 +1,81 @@
|
||||
#! /usr/bin/env nu
|
||||
|
||||
let version = open ../version.txt;
|
||||
|
||||
def main [ --publish(-p) --check(-c) --test(-t) ] {
|
||||
mkdir api/a/
|
||||
|
||||
open ../backend/windmill-api/openapi.yaml
|
||||
# openapi-generator confused with these two, so we just drop them
|
||||
| reject paths."/w/{workspace}/apps/create_raw"
|
||||
| reject paths."/w/{workspace}/apps/update_raw/{path}"
|
||||
| save -f api/openapi.yaml;
|
||||
|
||||
openapi-generator-cli generate -i api/openapi.yaml -g rust -o ./windmill_api --strict-spec true --additional-properties=packageName="windmill-api"
|
||||
|
||||
# Patch Cargo.toml
|
||||
open Cargo.toml
|
||||
| update package.version $version
|
||||
| save -f Cargo.toml
|
||||
|
||||
# Patch windmill_api/Cargo.toml
|
||||
open windmill_api/Cargo.toml
|
||||
# Use rustls - otherwise compilation will fail due to missing libssl
|
||||
| update dependencies.reqwest.features [json, multipart, rustls-tls]
|
||||
| insert dependencies.reqwest.default-features false
|
||||
| update package.license "Apache-2.0"
|
||||
| insert package.homepage "https://windmill.dev"
|
||||
| save -f windmill_api/Cargo.toml
|
||||
|
||||
# Recursively replace serde_json::from_str with our patched version
|
||||
ls ./windmill_api/src/**/*.rs
|
||||
| each { |file|
|
||||
let path = $file.name
|
||||
open $path
|
||||
| str replace --all "serde_json::from_str" "crate::from_str_patched/* Externally injected from /build.nu */"
|
||||
| save -f $path
|
||||
}
|
||||
|
||||
# Inject patched from_str
|
||||
echo `
|
||||
// NOTE: Injected by rust-client/dev.nu
|
||||
pub fn from_str_patched<'a, T>(s: &'a str) -> Result<T, serde_json::Error>
|
||||
where
|
||||
T: serde::de::DeserializeOwned + 'static,
|
||||
{
|
||||
if std::any::TypeId::of::<T>() == std::any::TypeId::of::<String>()
|
||||
|| std::any::TypeId::of::<T>() == std::any::TypeId::of::<uuid::Uuid>() {
|
||||
// unsafe { std::mem::transmute::<&str, T>(s) }
|
||||
// Quote string
|
||||
let a = format!("\"{}\"", s.replace('"', r#"\""#));
|
||||
serde_json::from_str(&a)
|
||||
} else {
|
||||
serde_json::from_str(s)
|
||||
}
|
||||
}
|
||||
` | save --append ./windmill_api/src/lib.rs
|
||||
|
||||
if $check {
|
||||
print "Checking..."
|
||||
cargo check --no-default-features
|
||||
cargo check --features "async"
|
||||
}
|
||||
|
||||
if $test {
|
||||
print "Testing..."
|
||||
cargo test --features async simple
|
||||
cargo test --no-default-features
|
||||
}
|
||||
|
||||
if $publish {
|
||||
print "Publishing..."
|
||||
|
||||
print Publishing windmill-api
|
||||
cd windmill_api
|
||||
cargo publish --token $env.CRATES_IO_TOKEN --allow-dirty
|
||||
|
||||
print Publishing wmill
|
||||
cd ../
|
||||
cargo publish --token $env.CRATES_IO_TOKEN --allow-dirty
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user