65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package syslog
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// Framing represents the framing technique we expect the messages to come.
|
|
type Framing int
|
|
|
|
const (
|
|
// OctetCounting indicates the transparent framing technique for syslog transport.
|
|
OctetCounting Framing = iota
|
|
// NonTransparent indicates the non-transparent framing technique for syslog transport.
|
|
NonTransparent
|
|
)
|
|
|
|
func (f Framing) String() string {
|
|
switch f {
|
|
case OctetCounting:
|
|
return "OCTET-COUNTING"
|
|
case NonTransparent:
|
|
return "NON-TRANSPARENT"
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// UnmarshalTOML implements ability to unmarshal framing from TOML files.
|
|
func (f *Framing) UnmarshalTOML(data []byte) (err error) {
|
|
return f.UnmarshalText(data)
|
|
}
|
|
|
|
// UnmarshalText implements encoding.TextUnmarshaler
|
|
func (f *Framing) UnmarshalText(data []byte) (err error) {
|
|
s := string(data)
|
|
switch strings.ToUpper(s) {
|
|
case `OCTET-COUNTING`:
|
|
fallthrough
|
|
case `"OCTET-COUNTING"`:
|
|
fallthrough
|
|
case `'OCTET-COUNTING'`:
|
|
*f = OctetCounting
|
|
return
|
|
|
|
case `NON-TRANSPARENT`:
|
|
fallthrough
|
|
case `"NON-TRANSPARENT"`:
|
|
fallthrough
|
|
case `'NON-TRANSPARENT'`:
|
|
*f = NonTransparent
|
|
return
|
|
}
|
|
*f = -1
|
|
return fmt.Errorf("unknown framing")
|
|
}
|
|
|
|
// MarshalText implements encoding.TextMarshaler
|
|
func (f Framing) MarshalText() ([]byte, error) {
|
|
s := f.String()
|
|
if s != "" {
|
|
return []byte(s), nil
|
|
}
|
|
return nil, fmt.Errorf("unknown framing")
|
|
}
|