-
Notifications
You must be signed in to change notification settings - Fork 2
/
Command_Write.go
83 lines (72 loc) · 1.68 KB
/
Command_Write.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main
import (
"fmt"
"encoding/binary"
"strconv"
"bytes"
)
func write(cmd []string){
if len(currentBucket.path)==1{
fmt.Println("[Error] You cannot write values in the root directory. Use the 'bucket' command to make a value storing bucket.")
return
}
args,r := parseArguments(cmd,2)
if r==2{
fmt.Println("[Error] You must specify a key and value to write.")
return
} else if r==3{
fmt.Println("[Error] Couldn't parse arguments")
return
}
path := stringToPath(args[0],currentBucket)
trgt := path[len(path)-1]
nb := bckt{path[:len(path)-1]}
if !nb.exists() {
fmt.Println("[Error] The specified bucket doesn't exist")
return
}
dt:="string"
if len(args)>2{
if args[2]=="s"{
dt="string"
} else if args[2]=="i" {
dt="int"
} else if args[2]=="ui"{
dt="uint"
}
}
if dt=="string"{
nb.insert([]byte(trgt),[]byte(args[1]))
} else if dt=="int" {
i, err := strconv.ParseInt(args[1], 10, 32)
if err != nil {
fmt.Printf("[Error] Couldn't convert value string to int:\n%s\n", err)
return
}
buf := new(bytes.Buffer)
err2 := binary.Write(buf, binary.LittleEndian, i)
if err2 != nil {
fmt.Println("binary.Write failed:", err2)
return
}
nb.insert([]byte(trgt), buf.Bytes())
return
} else if dt=="uint" {
i, err := strconv.ParseUint(args[1], 10, 32)
if err != nil {
fmt.Printf("[Error] Couldn't convert value string to int:\n%s", err)
return
}
buf := new(bytes.Buffer)
err2 := binary.Write(buf, binary.LittleEndian, i)
if err2 != nil {
fmt.Println("[Error] binary.Write failed:", err2)
return
}
nb.insert([]byte(trgt), buf.Bytes())
return
} else {
fmt.Println("[Error] Unknown Insert Type.")
return
}
}