aboutsummaryrefslogtreecommitdiff
path: root/widget/api
diff options
context:
space:
mode:
Diffstat (limited to 'widget/api')
-rw-r--r--widget/api/handle.go34
-rw-r--r--widget/api/hello.go25
2 files changed, 59 insertions, 0 deletions
diff --git a/widget/api/handle.go b/widget/api/handle.go
new file mode 100644
index 0000000..e04d3d2
--- /dev/null
+++ b/widget/api/handle.go
@@ -0,0 +1,34 @@
+package api
+
+import (
+ "fmt"
+ "io"
+ "os"
+)
+
+type Widget struct {
+ Hello
+ Writer io.Writer
+}
+
+func NewWidget(name, id string) *Widget {
+ return &Widget{
+ Hello: Hello{
+ Name: name,
+ ID: id,
+ Version: 1,
+ },
+ Writer: os.Stdout,
+ }
+}
+
+func (w *Widget) Handle() error {
+ if len(os.Args) < 2 {
+ return fmt.Errorf("no method")
+ }
+ switch Method(os.Args[1]) {
+ case MethodHello:
+ return w.Hello.Respond(w.Writer)
+ }
+ return fmt.Errorf("unknown method: %s", os.Args[1])
+}
diff --git a/widget/api/hello.go b/widget/api/hello.go
new file mode 100644
index 0000000..7995a36
--- /dev/null
+++ b/widget/api/hello.go
@@ -0,0 +1,25 @@
+package api
+
+import (
+ "encoding/json"
+ "io"
+)
+
+type Method string
+
+const MethodHello Method = "hello"
+
+type Hello struct {
+ Name string `json:"name"`
+ ID string `json:"id"`
+ Version uint `json:"version"`
+}
+
+func (h *Hello) Respond(w io.Writer) error {
+ b, err := json.Marshal(h)
+ if err != nil {
+ return err
+ }
+ _, err = w.Write(b)
+ return err
+}