forked from amironov73/GoIrbis
/
SubField.go
48 lines (39 loc) · 1.41 KB
/
SubField.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
package irbis
import "strings"
// SubField Подполе записи. Состоит из кода и значения.
type SubField struct {
// Code Код подполя
Code rune
// Value Значение подполя
Value string
}
// NewSubField Конструктор, создает подполе
// с указанными кодом и значением.
func NewSubField(code rune, value string) *SubField {
return &SubField{Code: code, Value: value}
}
// Clone клонирует подполе.
func (subfield *SubField) Clone() *SubField {
result := new(SubField)
result.Code = subfield.Code
result.Value = strings.Repeat(subfield.Value, 1)
return result
}
// Decode Декодирование подполя из протокольного представления.
func (subfield *SubField) Decode(text string) {
runes := []rune(text)
subfield.Code = runes[0]
subfield.Value = text[1:]
}
// Encode Кодирование подполя в протокольное представление.
func (subfield *SubField) Encode() string {
return "^" + string(subfield.Code) + subfield.Value
}
// String Выдает текстовое представление подполя.
func (subfield *SubField) String() string {
return subfield.Encode()
}
// Verify Верификация подполя.
func (subfield *SubField) Verify() bool {
return subfield.Code != '\x00' && subfield.Value != ""
}