Files
pmomusic/upnp/devices/services/actions/argument.go
2025-08-01 12:45:42 +02:00

101 lines
2.1 KiB
Go

package actions
import (
"gargoton.petite-maison-orange.fr/eric/pmomusic/upnp/devices/services/statevariables"
"github.com/beevik/etree"
)
type Argument struct {
name string
statevariables *statevariables.StateVariable
in bool
out bool
}
func newArgument(name string, statevariable *statevariables.StateVariable) *Argument {
arg := &Argument{
name: name,
statevariables: statevariable,
}
return arg
}
func NewInArgument(name string, statevariable *statevariables.StateVariable) *Argument {
arg := newArgument(name, statevariable)
arg.in = true
return arg
}
func NewOutArgument(name string, statevariable *statevariables.StateVariable) *Argument {
arg := newArgument(name, statevariable)
arg.out = true
return arg
}
func NewInOutArgument(name string, statevariable *statevariables.StateVariable) *Argument {
arg := newArgument(name, statevariable)
arg.in = true
arg.out = true
return arg
}
func (a *Argument) Name() string {
return a.name
}
func (sv Argument) TypeID() string {
return "Argument"
}
func (a *Argument) StateVariable() *statevariables.StateVariable {
return a.statevariables
}
func (a *Argument) IsIn() bool {
return a.in
}
func (a *Argument) IsOut() bool {
return a.out
}
func (a *Argument) ToXMLElement() *etree.Element {
var elem, arg *etree.Element
if a.IsIn() && a.IsOut() {
elem = etree.NewElement("")
arg = elem.CreateElement("argument")
} else {
elem = etree.NewElement("argument")
arg = elem
}
if a.IsIn() {
name := arg.CreateElement("name")
name.SetText(a.Name())
direction := arg.CreateElement("direction")
direction.SetText("in")
relatedStateVariable := arg.CreateElement("relatedStateVariable")
relatedStateVariable.SetText(a.StateVariable().Name())
}
if a.IsIn() && a.IsOut() {
arg = elem.CreateElement("argument")
}
if a.IsOut() {
name := arg.CreateElement("name")
name.SetText(a.Name())
direction := arg.CreateElement("direction")
direction.SetText("out")
relatedStateVariable := arg.CreateElement("relatedStateVariable")
relatedStateVariable.SetText(a.StateVariable().Name())
}
return elem
}