s0rg/decompose

View on GitHub
internal/graph/netproto.go

Summary

Maintainability
A
0 mins
Test Coverage
A
94%
package graph

import "strings"

type NetProto int16

const (
    TCP  NetProto = 1 << iota
    UDP  NetProto = 1 << iota
    UNIX NetProto = 1 << iota
    NONE NetProto = 0
    ALL  NetProto = TCP | UDP | UNIX
    pMAX          = 3

    sNONE = "none"
    sTCP  = "tcp"
    sUDP  = "udp"
    sUNIX = "unix"
    sALL  = "all"
)

func (p NetProto) String() string {
    buf := make([]string, 0, pMAX)

    if p.Has(TCP) {
        buf = append(buf, sTCP)
    }

    if p.Has(UDP) {
        buf = append(buf, sUDP)
    }

    if p.Has(UNIX) {
        buf = append(buf, sUNIX)
    }

    if len(buf) == 0 {
        buf = append(buf, sNONE)
    }

    return strings.Join(buf, ",")
}

func (p *NetProto) Set(mask NetProto) {
    *p |= mask
}

func (p NetProto) Has(mask NetProto) bool {
    return (p & mask) == mask
}

func ParseNetProto(val string) (p NetProto, ok bool) {
    items := strings.Split(val, ",")

    for _, v := range items {
        switch v {
        case sALL:
            p.Set(ALL)
        case sTCP:
            p.Set(TCP)
        case sUDP:
            p.Set(UDP)
        case sUNIX:
            p.Set(UNIX)
        default:
            return
        }
    }

    return p, true
}