Crate tencent_scf[−][src]
A rust runtime for Tencent Cloud Serverless Compute Function
This library provides a basic custom runtime for a rust application on Tencent Cloud as Serverless Compute Function. For complete setup, see Setup.
start vs start_uncatched
There are two varaints of start function to start the runtime, to sum up:
startcatches panic from the provided serverless compute function, but this requires the function to beRefUnwindSafe. Most pure function should satisfy this.start_uncatchedallows the serverless compute function to panic the whole process and relies on the cloud to tear down the executor and restart. Sometimes this is necessary to reference!RefUnwindSafetypes. Connection pool, for example, usually is not unwind-safe.
Built-in Events
When enabling the correspondent builtin-* feature, auto serialization and deserialization of
certain built-in events and reponses are supported.
Current supported built-in events/responses are:
-
API Gateway: enabled by feature
builtin-api-gateway, supports trigger as described in API Gateway Trigger.builtin::api::Requestandbuiltin::api::Responsewill be provided, which are re-export ofhttp::Requestandhttp::Responsewith support of auto deserialization/serialization.For more information, see [the module-level documentation][builtin::api].
use std::convert::Infallible; use tencent_scf::{ builtin::api::{Request, Response, ResponseBuilder}, make_scf, start, Context, }; fn main() { let scf = make_scf( |event: Request<String>, _context: Context| -> Result<Response<String>, Infallible> { Ok(ResponseBuilder::new() .status(200) .body("Hello World".to_string()) .unwrap()) }, ); start(scf); }
Custom Event and Response
Custom types of event and reponse are supported.
Auto Serialization/Deserialization
Any type that implements serde::Deserialize and is marked as convert::AsJson can be
deserialized from JSON automatically when feature "json" is enabled. Similarly for types
implementing serde::Serialize and is marked as convert::AsJson.
Example
use std::convert::Infallible; use serde::{Deserialize, Serialize}; // with "json" feature enabled use tencent_scf::{convert::AsJson, make_scf, start, Context}; // define a custom event #[derive(Deserialize)] struct CustomEvent { a: i32, b: i32, } // mark the custom event as json for auto deserialization impl AsJson for CustomEvent {} // define a custom response #[derive(Serialize)] struct CustomResponse { a_plus_b: i32, } // mark the custom response as json for auto serialization impl AsJson for CustomResponse {} // make the scf let scf = make_scf( |event: CustomEvent, _context: Context| -> Result<CustomResponse, Infallible> { Ok(CustomResponse { a_plus_b: event.a + event.b, }) }, ); // start the runtime in the main function start(scf);
Manual Serialization/Deserialization
User can also chose to implement convert::FromReader for incoming events and
convert::IntoBytes for outgoing response.
Modules
| builtin | Collection of built-in |
| convert | Module that contains traits for converting incoming payload to |
Structs
| Context | The context of the invocation, assembled from environment variables and invocation headers. |
Traits
| ServerlessComputeFunction | Main trait for a serverless compute function. |
Functions
| make_scf | Create a |
| start | Start the runtime with the given serverless compute function. |
| start_uncatched | Start the runtime with the given serverless compute function without catching panics. |