zoukankan      html  css  js  c++  java
  • compare.go


    package clientv3

    import (
        pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
    )

    type CompareTarget int
    type CompareResult int

    const (
        CompareVersion CompareTarget = iota
        CompareCreated
        CompareModified
        CompareValue
    )

    type Cmp pb.Compare

    func Compare(cmp Cmp, result string, v interface{}) Cmp {
        var r pb.Compare_CompareResult

        switch result {
        case "=":
            r = pb.Compare_EQUAL
        case "!=":
            r = pb.Compare_NOT_EQUAL
        case ">":
            r = pb.Compare_GREATER
        case "<":
            r = pb.Compare_LESS
        default:
            panic("Unknown result op")
        }

        cmp.Result = r
        switch cmp.Target {
        case pb.Compare_VALUE:
            val, ok := v.(string)
            if !ok {
                panic("bad compare value")
            }
            cmp.TargetUnion = &pb.Compare_Value{Value: []byte(val)}
        case pb.Compare_VERSION:
            cmp.TargetUnion = &pb.Compare_Version{Version: mustInt64(v)}
        case pb.Compare_CREATE:
            cmp.TargetUnion = &pb.Compare_CreateRevision{CreateRevision: mustInt64(v)}
        case pb.Compare_MOD:
            cmp.TargetUnion = &pb.Compare_ModRevision{ModRevision: mustInt64(v)}
        default:
            panic("Unknown compare type")
        }
        return cmp
    }

    func Value(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_VALUE}
    }

    func Version(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_VERSION}
    }

    func CreateRevision(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_CREATE}
    }

    func ModRevision(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_MOD}
    }

    func mustInt64(val interface{}) int64 {
        if v, ok := val.(int64); ok {
            return v
        }
        if v, ok := val.(int); ok {
            return int64(v)
        }
        panic("bad value")
    }

  • 相关阅读:
    Python全栈之路Day19
    Python全栈之路Day20
    Python全栈之路Day21
    子元素应该margin-top为何会影响父元素【转】
    HTML5的效果网站demo
    用CSS让字体在一行内显示不换行
    jQuery获得页面元素的绝对/相对位置
    DIV垂直/水平居中2(DIV宽度和高度是动态的)
    Jquery常用方法
    关于JS正则表达式
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7452671.html
Copyright © 2011-2022 走看看