srvrls - a lightweight serverless framework

CodeBuild test indicator

We built this library to simplify building applications that use AWS API Gateway as a proxy for AWS Lambda.

This library has opinions, strong ones, very possibly not your own. Our design priorities here are simple:

This wrapper turns this

impl Handler<ApiGatewayProxyRequest, ApiGatewayProxyResponse, HandlerError> for App {
    fn run(&mut self, req: ApiGatewayProxyRequest, _ctx: Context) -> Result<ApiGatewayProxyResponse, HandlerError> {
        match some_function(req) {
            Ok(response) => {
                ApiGatewayProxyResponse {
                    status_code: 200,
                    headers: hashmap!(String::from("Content-Type") => String::from("application/json")),
                    multi_value_headers: HashMap::new(),
                    body: Some(response),
                    is_base64_encoded: None,
                }
            }, 
            Err(e) => {
                ApiGatewayProxyResponse {
                    status_code: 400,
                    headers: hashmap!(String::from("Content-Type") => String::from("application/json")),
                    multi_value_headers: HashMap::new(),
                    body: Some(e.message),
                    is_base64_encoded: None,
                }
            }
        }
    }
}

into this

impl SrvrlsApplication for App {
    fn handle(&mut self, event: SrvrlsRequest) -> Result<SrvrlsResponse, SrvrlsError> {
        let response = some_function?;
        Ok(SrvrlsResponse::ok(response))
    }
}