diff options
| author | Shulhan <ms@kilabit.info> | 2022-03-21 12:50:35 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2022-03-21 12:50:35 +0700 |
| commit | cc830f4f098380987d3edad63fe442b1af5c9f1a (patch) | |
| tree | 7b492ecf8671c66804bf1cda0b9c0fb350d1e4b3 | |
| parent | 67ff9a046ef5b38cb15e240811cd7c6c1126ffcc (diff) | |
| download | pakakeh.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.go | 18 | ||||
| -rw-r--r-- | lib/xmlrpc/value_example_test.go | 71 |
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 +} |
