aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/net/urllib/values.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/net/urllib/values.v')
-rw-r--r--v_windows/v/vlib/net/urllib/values.v87
1 files changed, 87 insertions, 0 deletions
diff --git a/v_windows/v/vlib/net/urllib/values.v b/v_windows/v/vlib/net/urllib/values.v
new file mode 100644
index 0000000..ee5c329
--- /dev/null
+++ b/v_windows/v/vlib/net/urllib/values.v
@@ -0,0 +1,87 @@
+// Copyright (c) 2019-2021 Alexander Medvednikov. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+module urllib
+
+struct Value {
+pub mut:
+ data []string
+}
+
+struct Values {
+pub mut:
+ data map[string]Value
+ len int
+}
+
+// new_values returns a new Values struct for creating
+// urlencoded query string parameters. it can also be to
+// post form data with application/x-www-form-urlencoded.
+// values.encode() will return the encoded data
+pub fn new_values() Values {
+ return Values{
+ data: map[string]Value{}
+ }
+}
+
+// Currently you will need to use all()[key].data
+// once map[string][]string is implemented
+// this will be fixed
+pub fn (v &Value) all() []string {
+ return v.data
+}
+
+// get gets the first value associated with the given key.
+// If there are no values associated with the key, get returns
+// a empty string.
+pub fn (v &Values) get(key string) string {
+ if v.data.len == 0 {
+ return ''
+ }
+ vs := v.data[key]
+ if vs.data.len == 0 {
+ return ''
+ }
+ return vs.data[0]
+}
+
+// get_all gets the all the values associated with the given key.
+// If there are no values associated with the key, get returns
+// a empty []string.
+pub fn (v &Values) get_all(key string) []string {
+ if v.data.len == 0 {
+ return []
+ }
+ vs := v.data[key]
+ if vs.data.len == 0 {
+ return []
+ }
+ return vs.data
+}
+
+// set sets the key to value. It replaces any existing
+// values.
+pub fn (mut v Values) set(key string, value string) {
+ mut a := v.data[key]
+ a.data = [value]
+ v.data[key] = a
+ v.len = v.data.len
+}
+
+// add adds the value to key. It appends to any existing
+// values associated with key.
+pub fn (mut v Values) add(key string, value string) {
+ mut a := v.data[key]
+ if a.data.len == 0 {
+ a.data = []
+ }
+ a.data << value
+ v.data[key] = a
+ v.len = v.data.len
+}
+
+// del deletes the values associated with key.
+pub fn (mut v Values) del(key string) {
+ v.data.delete(key)
+ v.len = v.data.len
+}