poolster-plugin-java 0.5.0-alpha.1

Native Java SDK generator for Poolster
Documentation
use super::*;
use poolster_core::engine::{Meta, Plugin, PluginContext};
pub struct OAuth {
    meta: Meta,
}
pub fn oauth() -> OAuth {
    OAuth { meta: Meta::new() }
}
impl Plugin<Java> for OAuth {
    fn kind(&self) -> &'static str {
        "java-oauth"
    }
    fn meta(&self) -> &Meta {
        &self.meta
    }
    fn generate(&self, cx: &mut PluginContext<'_, Java>) -> Result<()> {
        let namespace = java_package_name(
            cx.settings
                .package_name
                .as_deref()
                .unwrap_or(&format!("io.poolster.{}", package_segment(&cx.api.name))),
        );
        for (name, source) in [
            (
                "OAuthClientCredentials",
                include_str!("../templates/oauth.java.tmpl"),
            ),
            (
                "OAuthHttpClient",
                include_str!("../templates/oauth_http.java.tmpl"),
            ),
        ] {
            cx.files.emit(GeneratedFile::new(
                format!(
                    "src/main/java/{}/{}.java",
                    namespace.replace('.', "/"),
                    name
                ),
                source.replace("__PACKAGE__", &namespace),
            )?)?;
        }
        Ok(())
    }
}
#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    #[ignore = "requires native JDK17 and Maven"]
    fn native_oauth_cache_singleflight_replay_origin_and_interruption() {
        let api = Api {
            name: "OAuth".into(),
            ..Default::default()
        };
        let tree = poolster_core::engine::Packages::new()
            .package(
                crate::package("sdk")
                    .name("io.poolster.oauth")
                    .with(crate::sdk())
                    .with(oauth()),
            )
            .generate(&api, None)
            .unwrap();
        let dir = tempfile::tempdir().unwrap();
        tree.write_to(dir.path()).unwrap();
        let cwd = dir.path().join("sdk");
        std::fs::create_dir_all(cwd.join("src/test/java/io/poolster/oauth")).unwrap();
        std::fs::write(
            cwd.join("src/test/java/io/poolster/oauth/OAuthProbe.java"),
            include_str!("../tests/fixtures/oauth_probe.java"),
        )
        .unwrap();
        let output = std::process::Command::new("mvn")
            .args([
                "-q",
                "test-compile",
                "org.codehaus.mojo:exec-maven-plugin:3.5.0:java",
                "-Dexec.mainClass=io.poolster.oauth.OAuthProbe",
                "-Dexec.classpathScope=test",
            ])
            .current_dir(cwd)
            .output()
            .unwrap();
        assert!(
            output.status.success(),
            "{}{}",
            String::from_utf8_lossy(&output.stdout),
            String::from_utf8_lossy(&output.stderr)
        );
    }
}