JSON compatibility with cylon and artoo
This commit is contained in:
parent
396c9cf466
commit
dc968aa959
78
api.go
78
api.go
|
@ -9,16 +9,40 @@ import (
|
|||
|
||||
type api struct{}
|
||||
|
||||
type jsonRobot struct {
|
||||
Name string `json:"name"`
|
||||
Commands []string `json:"commands"`
|
||||
Connections []*jsonConnection `json:"connections"`
|
||||
Devices []*jsonDevice `json:"devices"`
|
||||
}
|
||||
|
||||
type jsonDevice struct {
|
||||
Name string `json:"name"`
|
||||
Driver string `json:"driver"`
|
||||
Connection *jsonConnection `json:"connection"`
|
||||
Commands []string `json:"commands"`
|
||||
}
|
||||
|
||||
type jsonConnection struct {
|
||||
Name string `json:"name"`
|
||||
Port string `json:"port"`
|
||||
Adaptor string `json:"adaptor"`
|
||||
}
|
||||
|
||||
func Api(bot *Master) {
|
||||
a := new(api)
|
||||
m := martini.Classic()
|
||||
|
||||
m.Get("/robots", func() string {
|
||||
return toJson(bot.Robots)
|
||||
jsonRobots := make([]*jsonRobot, 0)
|
||||
for _, robot := range bot.Robots {
|
||||
jsonRobots = append(jsonRobots, a.formatJsonRobot(&robot))
|
||||
}
|
||||
return toJson(jsonRobots)
|
||||
})
|
||||
|
||||
m.Get("/robots/:robotname", func(params martini.Params) string {
|
||||
return toJson(bot.FindRobot(params["robotname"]))
|
||||
return toJson(a.formatJsonRobot(bot.FindRobot(params["robotname"])))
|
||||
})
|
||||
|
||||
m.Get("/robots/:robotname/commands", func(params martini.Params) string {
|
||||
|
@ -39,27 +63,16 @@ func Api(bot *Master) {
|
|||
})
|
||||
|
||||
m.Get("/robots/:robotname/devices", func(params martini.Params) string {
|
||||
return toJson(bot.FindRobot(params["robotname"]).GetDevices())
|
||||
devices := bot.FindRobot(params["robotname"]).GetDevices()
|
||||
jsonDevices := make([]*jsonDevice, 0)
|
||||
for _, device := range devices {
|
||||
jsonDevices = append(jsonDevices, a.formatJsonDevice(device))
|
||||
}
|
||||
return toJson(jsonDevices)
|
||||
})
|
||||
|
||||
type jsonDevice struct {
|
||||
Name string `json:"name"`
|
||||
Driver string `json:"driver"`
|
||||
Connection map[string]interface{} `json:"connection"`
|
||||
Commands []string `json:"commands"`
|
||||
}
|
||||
|
||||
m.Get("/robots/:robotname/devices/:devicename", func(params martini.Params) string {
|
||||
device := bot.FindRobotDevice(params["robotname"], params["devicename"])
|
||||
jsonDevice := new(jsonDevice)
|
||||
jsonDevice.Name = device.Name
|
||||
jsonDevice.Driver = FieldByNamePtr(device.Driver, "Name").Interface().(string)
|
||||
jsonDevice.Connection = make(map[string]interface{})
|
||||
jsonDevice.Connection["name"] = FieldByNamePtr(FieldByNamePtr(device.Driver, "Adaptor").Interface().(AdaptorInterface), "Name").Interface().(string)
|
||||
jsonDevice.Connection["port"] = FieldByNamePtr(FieldByNamePtr(device.Driver, "Adaptor").Interface().(AdaptorInterface), "Port").Interface().(string)
|
||||
jsonDevice.Connection["adaptor"] = FieldByNamePtr(FieldByNamePtr(device.Driver, "Adaptor").Interface().(AdaptorInterface), "Name").Interface().(string)
|
||||
jsonDevice.Commands = FieldByNamePtr(device.Driver, "Commands").Interface().([]string)
|
||||
return toJson(jsonDevice)
|
||||
return toJson(a.formatJsonDevice(bot.FindRobotDevice(params["robotname"], params["devicename"])))
|
||||
})
|
||||
|
||||
m.Get("/robots/:robotname/devices/:devicename/commands", func(params martini.Params) string {
|
||||
|
@ -78,6 +91,31 @@ func Api(bot *Master) {
|
|||
go m.Run()
|
||||
}
|
||||
|
||||
func (a *api) formatJsonRobot(robot *Robot) *jsonRobot {
|
||||
jsonRobot := new(jsonRobot)
|
||||
jsonRobot.Name = robot.Name
|
||||
jsonRobot.Commands = robot.RobotCommands
|
||||
jsonRobot.Connections = make([]*jsonConnection, 0)
|
||||
for _, device := range robot.devices {
|
||||
jsonDevice := a.formatJsonDevice(device)
|
||||
jsonRobot.Connections = append(jsonRobot.Connections, jsonDevice.Connection)
|
||||
jsonRobot.Devices = append(jsonRobot.Devices, jsonDevice)
|
||||
}
|
||||
return jsonRobot
|
||||
}
|
||||
|
||||
func (a *api) formatJsonDevice(device *device) *jsonDevice {
|
||||
jsonDevice := new(jsonDevice)
|
||||
jsonDevice.Name = device.Name
|
||||
jsonDevice.Driver = FieldByNamePtr(device.Driver, "Name").Interface().(string)
|
||||
jsonDevice.Connection = new(jsonConnection)
|
||||
jsonDevice.Connection.Name = FieldByNamePtr(FieldByNamePtr(device.Driver, "Adaptor").Interface().(AdaptorInterface), "Name").Interface().(string)
|
||||
jsonDevice.Connection.Port = FieldByNamePtr(FieldByNamePtr(device.Driver, "Adaptor").Interface().(AdaptorInterface), "Port").Interface().(string)
|
||||
jsonDevice.Connection.Adaptor = FieldByNamePtr(device.Driver, "Adaptor").Type().Name()
|
||||
jsonDevice.Commands = FieldByNamePtr(device.Driver, "Commands").Interface().([]string)
|
||||
return jsonDevice
|
||||
}
|
||||
|
||||
func (a *api) executeCommand(bot *Master, params martini.Params, res http.ResponseWriter, req *http.Request) string {
|
||||
decoder := json.NewDecoder(req.Body)
|
||||
var body map[string]interface{}
|
||||
|
|
Loading…
Reference in New Issue