A web framework for MoonBit.
Dependencies
async fn main {
let app = @mocket.new()
app.get("/", _ => "Hello, Mocket!")
app.listen(":80")
}moon run src/example --target jsmoon run src/example --target native
impl BodyReader for Stringimpl BodyReader for FixedArray[Byte]impl BodyReader for Bytesimpl BodyReader for Array[Byte]impl BodyReader for Jsonpub(open) trait Responder {
fn options(Self, res : HttpResponse) -> Unit
fn output(Self, buf : Buffer) -> Unit
}pub(open) trait ServeStaticProvider {
fn get_meta(Self, id : StringView) -> StaticAssetMeta?
fn get_contents(Self, id : StringView) -> &Responder
fn get_type(Self, ext : String) -> String?
fn get_encodings(Self) -> Map[String, String]
fn get_index_names(Self) -> Array[String]
fn get_fallthrough(Self) -> Bool
}pub(all) struct CookieItem {
name : String
value : String
max_age : Int?
path : String?
domain : String?
secure : Bool?
http_only : Bool?
same_site : SameSiteOption?
} derive(Eq)impl Show for CookieItemtype Htmlpub(all) struct HttpRequest {
http_method : String
url : String
headers : Map[StringView, StringView]
raw_body : Bytes
}pub(all) struct HttpResponse {
status_code : StatusCode
headers : Map[StringView, StringView]
cookies : Map[String, CookieItem]
raw_body : Bytes
}impl Responder for HttpResponsefn HttpResponse::new(status_code : StatusCode, headers? : Map[StringView, StringView], cookies? : Map[String, CookieItem], raw_body? : Bytes) -> HttpResponsefn HttpResponse::set_cookie(self : HttpResponse, name : String, value : String, max_age? : Int, path? : String, domain? : String, secure? : Bool, http_only? : Bool, same_site? : SameSiteOption) -> Unit#alias(T)
pub(all) struct Mocket {
base_path : String
mappings : Map[(String, String), async (MocketEvent) -> &Responder noraise]
middlewares : Array[(String, async (MocketEvent, async () -> &Responder noraise) -> &Responder noraise)]
static_routes : Map[String, Map[String, async (MocketEvent) -> &Responder noraise]]
dynamic_routes : Map[String, Array[(String, async (MocketEvent) -> &Responder noraise)]]
ws_static_routes : Map[String, (WebSocketEvent) -> Unit]
ws_dynamic_routes : Array[(String, (WebSocketEvent) -> Unit)]
ws_clients : Map[String, Unit]
ws_channels : Map[String, Map[String, Unit]]
ws_client_port : Map[String, Int]
// private fields
}fn Mocket::acl(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::all(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::bind(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::checkin(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::checkout(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::connect(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::copy(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::delete(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::get(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::head(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::label(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::link(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::lock(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::merge(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::mkactivity(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::mkcalendar(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::mkcol(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::mkredirectref(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::mkworkspace(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::move_(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::on(self : Mocket, event : String, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::options(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::orderpatch(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::patch(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::post(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::pri(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::propfind(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::proppatch(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::put(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::query(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::rebind(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::report(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::search(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::trace(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::unbind(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::uncheckout(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::unlink(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::unlock(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::update(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::updateredirectref(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitfn Mocket::use_middleware(self : Mocket, middleware : async (MocketEvent, async () -> &Responder noraise) -> &Responder noraise, base_path? : String) -> Unitfn Mocket::version_control(self : Mocket, path : String, handler : async (MocketEvent) -> &Responder noraise) -> Unitpub(all) struct MocketEvent {
req : HttpRequest
res : HttpResponse
params : Map[String, StringView]
}pub(all) struct MultipartFormValue {
filename : String?
content_type : String?
data : BytesView
}pub(all) struct StaticAssetMeta {
asset_type : String?
etag : String?
mtime : Int64?
path : String?
size : Int64?
encoding : String?
}fn StaticAssetMeta::new(asset_type? : String, etag? : String, mtime? : Int64, path? : String, size? : Int64, encoding? : String) -> StaticAssetMetapub(all) enum StatusCode {
Continue
SwitchingProtocols
Processing
EarlyHints
OK
Created
Accepted
NonAuthoritativeInfo
NoContent
ResetContent
PartialContent
MultiStatus
AlreadyReported
IMUsed
MultipleChoices
MovedPermanently
Found
SeeOther
NotModified
UseProxy
TemporaryRedirect
PermanentRedirect
BadRequest
Unauthorized
PaymentRequired
Forbidden
NotFound
MethodNotAllowed
NotAcceptable
ProxyAuthRequired
RequestTimeout
Conflict
Gone
LengthRequired
PreconditionFailed
RequestEntityTooLarge
RequestUriTooLong
UnsupportedMediaType
RequestedRangeNotSatisfiable
ExpectationFailed
Teapot
MisdirectedRequest
UnprocessableEntity
Locked
FailedDependency
TooEarly
UpgradeRequired
PreconditionRequired
TooManyRequests
RequestHeaderFieldsTooLarge
UnavailableForLegalReasons
InternalServerError
NotImplemented
BadGateway
ServiceUnavailable
GatewayTimeout
HttpVersionNotSupported
VariantAlsoNegotiates
InsufficientStorage
LoopDetected
NotExtended
NetworkAuthenticationRequired
Custom(Int)
} derive(Eq, ToJson)pub(all) enum WebSocketAggregatedMessage {
Text(String)
Binary(Bytes)
Ping
}pub(all) enum WebSocketEvent {
Open(WebSocketPeer)
Message(WebSocketPeer, WebSocketAggregatedMessage)
Close(WebSocketPeer)
}async fn dispatch_http(mocket : Mocket, http_method : String, url : String, headers : Map[StringView, StringView], raw_body : Bytes) -> HttpResponse noraiseasync fn execute_middlewares(middlewares : Array[(String, async (MocketEvent, async () -> &Responder noraise) -> &Responder noraise)], event : MocketEvent, final_handler : async (MocketEvent) -> &Responder noraise) -> &Responder noraisefn register_ws_connection(connection_id : String, text_sender : (String) -> Unit, binary_sender : (Bytes) -> Unit, pong_sender : () -> Unit) -> Unitasync fn[T, E : Error] suspend(f : ((T) -> Unit, (E) -> Unit) -> Unit) -> T raise EA web framework for MoonBit.
Dependencies