You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.6 KiB
71 lines
1.6 KiB
package structure
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"strconv"
|
|
)
|
|
|
|
const (
|
|
rdbModuleOpcodeEOF = 0 // End of module value.
|
|
rdbModuleOpcodeSINT = 1 // Signed integer.
|
|
rdbModuleOpcodeUINT = 2 // Unsigned integer.
|
|
rdbModuleOpcodeFLOAT = 3 // Float.
|
|
rdbModuleOpcodeDOUBLE = 4 // Double.
|
|
rdbModuleOpcodeSTRING = 5 // String.
|
|
)
|
|
|
|
func ReadModuleUnsigned(rd io.Reader) string {
|
|
opcode := ReadByte(rd)
|
|
if opcode != rdbModuleOpcodeUINT {
|
|
log.Panicf("Unknown module unsigned encode type")
|
|
}
|
|
value := ReadLength(rd)
|
|
return strconv.FormatUint(value, 10)
|
|
}
|
|
|
|
func ReadModuleSigned(rd io.Reader) string {
|
|
opcode := ReadByte(rd)
|
|
if opcode != rdbModuleOpcodeSINT {
|
|
log.Panicf("Unknown module signed encode type")
|
|
}
|
|
value := ReadLength(rd)
|
|
return strconv.FormatUint(value, 10)
|
|
}
|
|
|
|
func ReadModuleFloat(rd io.Reader) string {
|
|
opcode := ReadByte(rd)
|
|
if opcode != rdbModuleOpcodeDOUBLE {
|
|
|
|
log.Panicf("Unknown module double encode type")
|
|
}
|
|
value := ReadDouble(rd)
|
|
return fmt.Sprintf("%f", value)
|
|
}
|
|
|
|
func ReadModuleDouble(rd io.Reader) string {
|
|
opcode := ReadByte(rd)
|
|
if opcode != rdbModuleOpcodeDOUBLE {
|
|
log.Panicf("Unknown module double encode type")
|
|
}
|
|
value := ReadDouble(rd)
|
|
return fmt.Sprintf("%f", value)
|
|
}
|
|
|
|
func ReadModuleString(rd io.Reader) string {
|
|
opcode := ReadByte(rd)
|
|
if opcode != rdbModuleOpcodeSTRING {
|
|
log.Panicf("Unknown module string encode type")
|
|
}
|
|
return ReadString(rd)
|
|
}
|
|
|
|
func ReadModuleEof(rd io.Reader) error {
|
|
eof := ReadLength(rd)
|
|
if eof != rdbModuleOpcodeEOF {
|
|
log.Panicf("The RDB file is not teminated by the proper module value EOF marker")
|
|
}
|
|
return nil
|
|
|
|
}
|
|
|