summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2022-03-21 12:50:35 +0700
committerShulhan <ms@kilabit.info>2022-03-21 12:50:35 +0700
commitcc830f4f098380987d3edad63fe442b1af5c9f1a (patch)
tree7b492ecf8671c66804bf1cda0b9c0fb350d1e4b3
parent67ff9a046ef5b38cb15e240811cd7c6c1126ffcc (diff)
downloadpakakeh.go-cc830f4f098380987d3edad63fe442b1af5c9f1a.tar.xz
lib/xmlrpc: add method to get boolean field value on Value
The GetFieldAsBoolean return the struct's field value by its key as bool type.
-rw-r--r--lib/xmlrpc/value.go18
-rw-r--r--lib/xmlrpc/value_example_test.go71
2 files changed, 89 insertions, 0 deletions
diff --git a/lib/xmlrpc/value.go b/lib/xmlrpc/value.go
index 99921014..7ea9ce41 100644
--- a/lib/xmlrpc/value.go
+++ b/lib/xmlrpc/value.go
@@ -137,6 +137,24 @@ func (v *Value) GetFieldAsFloat(key string) float64 {
}
//
+// GetFieldAsFloat get the struct's field value by its key as boolean.
+//
+func (v *Value) GetFieldAsBoolean(key string) bool {
+ if v == nil || v.StructMembers == nil {
+ return false
+ }
+ mv := v.StructMembers[key]
+ if mv == nil {
+ return false
+ }
+ abool, ok := mv.In.(bool)
+ if !ok {
+ return false
+ }
+ return abool
+}
+
+//
// GetFieldAsInteger get struct's field value by name as int.
//
func (v *Value) GetFieldAsInteger(key string) int {
diff --git a/lib/xmlrpc/value_example_test.go b/lib/xmlrpc/value_example_test.go
new file mode 100644
index 00000000..bdfafdfc
--- /dev/null
+++ b/lib/xmlrpc/value_example_test.go
@@ -0,0 +1,71 @@
+// Copyright 2022, Shulhan <ms@kilabit.info>. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package xmlrpc
+
+import (
+ "fmt"
+ "log"
+)
+
+func ExampleValue_GetFieldAsBoolean() {
+ var (
+ xmlb = `<?xml version="1.0"?>
+<methodResponse>
+<params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>boolean_false</name>
+ <value><boolean>0</boolean></value>
+ </member>
+ <member>
+ <name>boolean_true</name>
+ <value><boolean>1</boolean></value>
+ </member>
+ <member>
+ <name>string_0</name>
+ <value><string>0</string></value>
+ </member>
+ <member>
+ <name>string_1</name>
+ <value><string>1</string></value>
+ </member>
+ </struct>
+ </value>
+ </param>
+</params>
+</methodResponse>
+`
+ res = &Response{}
+
+ err error
+ )
+
+ err = res.UnmarshalText([]byte(xmlb))
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ fmt.Println("Get boolean field as string:")
+ fmt.Println(res.Param.GetFieldAsString("boolean_false"))
+ fmt.Println(res.Param.GetFieldAsString("boolean_true"))
+ fmt.Println("Get boolean field as boolean:")
+ fmt.Println(res.Param.GetFieldAsBoolean("boolean_false"))
+ fmt.Println(res.Param.GetFieldAsBoolean("boolean_true"))
+ fmt.Println("Get string field as boolean:")
+ fmt.Println(res.Param.GetFieldAsBoolean("string_0"))
+ fmt.Println(res.Param.GetFieldAsBoolean("string_1"))
+ //Output:
+ //Get boolean field as string:
+ //false
+ //true
+ //Get boolean field as boolean:
+ //false
+ //true
+ //Get string field as boolean:
+ //false
+ //false
+}