Unverified Commit fbdefac6 authored by Nugine's avatar Nugine
Browse files

codegen: s3_trait

parent 8b5eab68
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ mod dto;
mod error;
mod headers;
mod ops;
mod s3_trait;
mod xml;

mod aws_conv;
@@ -66,6 +67,12 @@ fn main() {
        xml::codegen(&ops, &rust_types, &mut gen);
    }

    {
        let path = "crates/s3s/src/s3_trait.rs";
        let mut gen = Codegen::create_file(path).unwrap();
        s3_trait::codegen(&ops, &mut gen);
    }

    {
        let path = "crates/s3s/src/ops/generated.rs";
        let mut gen = Codegen::create_file(path).unwrap();
+2 −28
Original line number Diff line number Diff line
use crate::dto::RustTypes;
use crate::gen::Codegen;
use crate::rust::{codegen_doc, default_value_literal};
use crate::rust::default_value_literal;
use crate::xml::{is_xml_output, is_xml_payload};
use crate::{default, f, headers, o};
use crate::{dto, rust, smithy};
@@ -94,42 +94,16 @@ pub fn codegen(ops: &Operations, rust_types: &RustTypes, g: &mut Codegen) {
        "use crate::http;",
        "use crate::error::*;",
        "use crate::path::S3Path;",
        "use crate::s3_trait::S3;",
        "",
        "use std::borrow::Cow;",
        "",
    ]);

    codegen_async_trait(ops, g);

    codegen_http(ops, rust_types, g);
    codegen_router(ops, rust_types, g);
}

fn codegen_async_trait(ops: &Operations, g: &mut Codegen) {
    g.ln("/// An async trait which represents the S3 API");
    g.ln("#[async_trait::async_trait]");
    g.ln("pub trait S3: Send + Sync + 'static {");

    for op in ops.values() {
        if op.name == "SelectObjectContent" {
            continue; // TODO: SelectObjectContent
        }

        codegen_doc(op.doc.as_deref(), g);

        let method_name = op.name.to_snake_case();

        g.ln(f!("async fn {method_name}(&self, _input: {}) -> S3Result<{}> {{", op.input, op.output));

        g.ln(f!("Err(s3_error!(NotImplemented, \"{} is not implemented yet\"))", op.name));
        g.ln("}");
        g.lf();
    }

    g.ln("}");
    g.lf();
}

fn status_code_name(code: u16) -> &'static str {
    match code {
        204 => "NO_CONTENT",
+34 −0
Original line number Diff line number Diff line
use crate::f;
use crate::gen::Codegen;
use crate::ops::Operations;
use crate::rust::codegen_doc;

use heck::ToSnakeCase;

pub fn codegen(ops: &Operations, g: &mut Codegen) {
    g.lines([
        "/// An async trait which represents the S3 API",
        "/// ",
        "/// Auto generated by codegen/src/s3_trait.rs",
        "",
        "use crate::dto::*;",
        "use crate::error::S3Result;",
        "",
        "#[async_trait::async_trait]",
        "pub trait S3: Send + Sync + 'static {",
        "",
    ]);

    for op in ops.values() {
        let method_name = op.name.to_snake_case();

        codegen_doc(op.doc.as_deref(), g);
        g.ln(f!("async fn {method_name}(&self, _input: {}) -> S3Result<{}> {{", op.input, op.output));
        g.ln(f!("Err(s3_error!(NotImplemented, \"{} is not implemented yet\"))", op.name));
        g.ln("}");
        g.lf();
    }

    g.ln("}");
    g.lf();
}
+2 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ mod auth;
mod header;
mod http;
mod ops;
mod s3_trait;
mod signature_v4;
mod xml;

@@ -27,7 +28,7 @@ pub mod stream;
pub use self::auth::*;
pub use self::error::*;
pub use self::http::{Body, Request, Response};
pub use self::ops::S3;
pub use self::s3_trait::S3;

#[cfg(test)]
mod tests {
+1 −5654

File changed.

Preview size limit exceeded, changes collapsed.

Loading