2019-08-01 16:01:03 +03:00
|
|
|
// Copyright (c) 2019 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 ValueStruct {
|
|
|
|
pub:
|
|
|
|
mut:
|
|
|
|
data []string
|
|
|
|
}
|
|
|
|
|
2019-08-03 00:28:55 +03:00
|
|
|
// using this instead of just ValueStruct
|
|
|
|
// because of unknown map initializer bug
|
2019-08-01 16:01:03 +03:00
|
|
|
type Value ValueStruct
|
|
|
|
|
|
|
|
struct Values {
|
|
|
|
pub:
|
|
|
|
mut:
|
|
|
|
data map[string]Value
|
|
|
|
size int
|
|
|
|
}
|
|
|
|
|
2019-08-03 00:28:55 +03:00
|
|
|
// 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 {
|
2019-08-01 16:01:03 +03:00
|
|
|
return Values{
|
|
|
|
data: map[string]Value{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-03 00:28:55 +03:00
|
|
|
// 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 {
|
2019-08-01 16:01:03 +03:00
|
|
|
return v.data
|
|
|
|
}
|
|
|
|
|
2019-08-03 00:28:55 +03:00
|
|
|
// 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 {
|
2019-08-01 16:01:03 +03:00
|
|
|
if v.data.size == 0 {
|
|
|
|
return ''
|
|
|
|
}
|
|
|
|
vs := v.data[key]
|
|
|
|
if vs.data.len == 0 {
|
|
|
|
return ''
|
|
|
|
}
|
|
|
|
return vs.data[0]
|
|
|
|
}
|
|
|
|
|
2019-08-03 00:28:55 +03:00
|
|
|
// 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.size == 0 {
|
|
|
|
return []string
|
|
|
|
}
|
|
|
|
vs := v.data[key]
|
|
|
|
if vs.data.len == 0 {
|
|
|
|
return []string
|
|
|
|
}
|
|
|
|
return vs.data
|
|
|
|
}
|
|
|
|
|
|
|
|
// set sets the key to value. It replaces any existing
|
2019-08-01 16:01:03 +03:00
|
|
|
// values.
|
2019-08-03 00:28:55 +03:00
|
|
|
pub fn (v mut Values) set(key, value string) {
|
|
|
|
mut a := v.data[key]
|
|
|
|
a.data = [value]
|
|
|
|
v.data[key] = a
|
2019-08-01 16:01:03 +03:00
|
|
|
v.size = v.data.size
|
|
|
|
}
|
|
|
|
|
2019-08-03 00:28:55 +03:00
|
|
|
// add adds the value to key. It appends to any existing
|
2019-08-01 16:01:03 +03:00
|
|
|
// values associated with key.
|
2019-08-03 00:28:55 +03:00
|
|
|
pub fn (v mut Values) add(key, value string) {
|
2019-08-01 16:01:03 +03:00
|
|
|
mut a := v.data[key]
|
2019-08-03 00:28:55 +03:00
|
|
|
if a.data.len == 0 {
|
|
|
|
a.data = []string
|
|
|
|
}
|
2019-08-01 16:01:03 +03:00
|
|
|
a.data << value
|
2019-08-03 00:28:55 +03:00
|
|
|
v.data[key] = a
|
|
|
|
v.size = v.data.size
|
2019-08-01 16:01:03 +03:00
|
|
|
}
|
|
|
|
|
2019-08-03 00:28:55 +03:00
|
|
|
// del deletes the values associated with key.
|
|
|
|
pub fn (v mut Values) del(key string) {
|
2019-08-01 16:01:03 +03:00
|
|
|
v.data.delete(key)
|
|
|
|
v.size = v.data.size
|
|
|
|
}
|