diff --git a/rpc/lux_rpc.go b/rpc/lux_rpc.go
new file mode 100644
index 0000000..92e9c4a
--- /dev/null
+++ b/rpc/lux_rpc.go
@@ -0,0 +1,17 @@
+package rpc
+
+import "encoding/xml"
+
+type LuxRpcRequest struct {
+ XMLName xml.Name `xml:"request"`
+ RequestID int `xml:"id,attr"`
+ Controller string `xml:"controller,attr"`
+ Command string `xml:"command,attr"`
+
+ // Commands specific fields
+ Hosts []struct {
+ XMLName xml.Name `xml:"host"`
+ HostID string `xml:"id,attr"`
+ Hostname string `xml:"hostname,attr"`
+ } `xml:"host"`
+}
diff --git a/tests/lux_rpc_test.go b/tests/lux_rpc_test.go
new file mode 100644
index 0000000..5fee861
--- /dev/null
+++ b/tests/lux_rpc_test.go
@@ -0,0 +1,42 @@
+package tests
+
+import (
+ "encoding/xml"
+ "lux/rpc"
+ "testing"
+)
+
+func TestRequestDecoding(t *testing.T) {
+ var request rpc.LuxRpcRequest
+
+ err := xml.Unmarshal([]byte(``), &request)
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Log(request)
+
+ err = xml.Unmarshal([]byte(``), &request)
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Log(request)
+
+ err = xml.Unmarshal([]byte(`
+
+
+
+ `), &request)
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Log(request)
+
+ err = xml.Unmarshal([]byte(`
+
+
+ `), &request)
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Log(request)
+}