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")
    }

  • 相关阅读:
    插件模块与模块之间的通信(转)
    C#反射调用其它DLL的委托事件 传值
    单元测试
    c#实现动态加载Dll(转)
    Access sql语句创建表及字段类型(转)
    关于不同数据库表自动转换的功能
    通过DataTable获得表的主键
    C/s程序过时了吗?
    关于C/s结构 本地目录的思考
    关于创建人,创建日期,修改人,修改日期
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7452671.html
Copyright © 2011-2022 走看看