89 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			V
		
	
	
| // Copyright (c) 2019-2020 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
 | |
| 	size 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.size == 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.size == 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 (v mut Values) set(key, value string) {
 | |
| 	mut a := v.data[key]
 | |
| 	a.data = [value]
 | |
| 	v.data[key] = a
 | |
| 	v.size = v.data.size
 | |
| }
 | |
| 
 | |
| // add adds the value to key. It appends to any existing
 | |
| // values associated with key.
 | |
| pub fn (v mut Values) add(key, value string) {
 | |
| 	mut a := v.data[key]
 | |
| 	if a.data.len == 0 {
 | |
| 		a.data = []
 | |
| 	}
 | |
| 	a.data << value
 | |
| 	v.data[key] = a
 | |
| 	v.size = v.data.size
 | |
| }
 | |
| 
 | |
| // del deletes the values associated with key.
 | |
| pub fn (v mut Values) del(key string) {
 | |
| 	v.data.delete(key)
 | |
| 	v.size = v.data.size
 | |
| }
 | |
| 
 |