aboutsummaryrefslogtreecommitdiffhomepage
path: root/worker/handlers.go
diff options
context:
space:
mode:
Diffstat (limited to 'worker/handlers.go')
-rw-r--r--worker/handlers.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/worker/handlers.go b/worker/handlers.go
new file mode 100644
index 0000000..e7ceef6
--- /dev/null
+++ b/worker/handlers.go
@@ -0,0 +1,67 @@
+package main
+
+import (
+ "fmt"
+ "net/http"
+
+ "github.com/labstack/echo/v4"
+)
+
+func newBadRequestError(err error) *echo.HTTPError {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid request: %s", err.Error()))
+}
+
+func handleSwiftCompile(c echo.Context) error {
+ var req swiftCompileRequestData
+ if err := c.Bind(&req); err != nil {
+ return newBadRequestError(err)
+ }
+ if err := req.validate(); err != nil {
+ return newBadRequestError(err)
+ }
+
+ res := execSwiftCompile(
+ c.Request().Context(),
+ req.Code,
+ req.maxDuration(),
+ )
+
+ return c.JSON(http.StatusOK, res)
+}
+
+func handleWasmCompile(c echo.Context) error {
+ var req wasmCompileRequestData
+ if err := c.Bind(&req); err != nil {
+ return newBadRequestError(err)
+ }
+ if err := req.validate(); err != nil {
+ return newBadRequestError(err)
+ }
+
+ res := execWasmCompile(
+ c.Request().Context(),
+ req.Code,
+ req.maxDuration(),
+ )
+
+ return c.JSON(http.StatusOK, res)
+}
+
+func handleTestRun(c echo.Context) error {
+ var req testRunRequestData
+ if err := c.Bind(&req); err != nil {
+ return newBadRequestError(err)
+ }
+ if err := req.validate(); err != nil {
+ return newBadRequestError(err)
+ }
+
+ res := execTestRun(
+ c.Request().Context(),
+ req.Code,
+ req.Stdin,
+ req.maxDuration(),
+ )
+
+ return c.JSON(http.StatusOK, res)
+}