mod auth;
mod basic;
mod bitfield;
mod bitmap;
mod cluster;
mod connection;
mod generic;
mod geo;
mod hash;
mod hll;
mod list;
mod pubsub;
mod set;
mod strings;
mod ttl;
mod util;
mod zset;
use resp_async::Router;
use crate::state::AppState;
pub fn build_router(state: AppState) -> Router<AppState> {
Router::from_state(state)
.route("PING", basic::ping)
.route("QUIT", basic::quit)
.route("AUTH", auth::auth)
.route("ECHO", connection::echo)
.route("SELECT", connection::select)
.route("CLIENT", connection::client)
.route("GET", strings::get)
.route("SET", strings::set)
.route("SETNX", strings::setnx)
.route("SETEX", strings::setex)
.route("PSETEX", strings::psetex)
.route("INCR", strings::incr)
.route("DECR", strings::decr)
.route("DEL", strings::del)
.route("EXISTS", strings::exists)
.route("EXPIRE", ttl::expire)
.route("PEXPIRE", ttl::pexpire)
.route("EXPIREAT", ttl::expireat)
.route("PEXPIREAT", ttl::pexpireat)
.route("PERSIST", ttl::persist)
.route("TTL", ttl::ttl)
.route("PTTL", ttl::pttl)
.route("TYPE", generic::type_cmd)
.route("KEYS", generic::keys)
.route("SCAN", generic::scan)
.route("RANDOMKEY", generic::randomkey)
.route("RENAME", generic::rename)
.route("RENAMENX", generic::renamenx)
.route("DBSIZE", generic::dbsize)
.route("FLUSHDB", generic::flushdb)
.route("FLUSHALL", generic::flushall)
.route("UNLINK", generic::unlink)
.route("CLUSTER", cluster::cluster)
.route("READONLY", cluster::readonly)
.route("READWRITE", cluster::readwrite)
.route("ASKING", cluster::asking)
.route("HSET", hash::hset)
.route("HMSET", hash::hset)
.route("HSETNX", hash::hsetnx)
.route("HGET", hash::hget)
.route("HMGET", hash::hmget)
.route("HGETALL", hash::hgetall)
.route("HKEYS", hash::hkeys)
.route("HVALS", hash::hvals)
.route("HEXISTS", hash::hexists)
.route("HDEL", hash::hdel)
.route("HLEN", hash::hlen)
.route("HSTRLEN", hash::hstrlen)
.route("HINCRBY", hash::hincrby)
.route("HINCRBYFLOAT", hash::hincrbyfloat)
.route("HRANDFIELD", hash::hrandfield)
.route("HSCAN", hash::hscan)
.route("SADD", set::sadd)
.route("SREM", set::srem)
.route("SISMEMBER", set::sismember)
.route("SMEMBERS", set::smembers)
.route("SCARD", set::scard)
.route("SRANDMEMBER", set::srandmember)
.route("SPOP", set::spop)
.route("SINTER", set::sinter)
.route("SUNION", set::sunion)
.route("SDIFF", set::sdiff)
.route("SINTERSTORE", set::sinterstore)
.route("SUNIONSTORE", set::sunionstore)
.route("SDIFFSTORE", set::sdiffstore)
.route("SSCAN", set::sscan)
.route("ZADD", zset::zadd)
.route("ZREM", zset::zrem)
.route("ZINCRBY", zset::zincrby)
.route("ZSCORE", zset::zscore)
.route("ZCARD", zset::zcard)
.route("ZCOUNT", zset::zcount)
.route("ZRANGE", zset::zrange)
.route("ZREVRANGE", zset::zrevrange)
.route("ZRANGEBYSCORE", zset::zrangebyscore)
.route("ZREVRANGEBYSCORE", zset::zrevrangebyscore)
.route("ZRANK", zset::zrank)
.route("ZREVRANK", zset::zrevrank)
.route("ZPOPMIN", zset::zpopmin)
.route("ZPOPMAX", zset::zpopmax)
.route("ZLEXCOUNT", zset::zlexcount)
.route("ZRANGEBYLEX", zset::zrangebylex)
.route("ZREVRANGEBYLEX", zset::zrevrangebylex)
.route("ZSCAN", zset::zscan)
.route("LPUSH", list::lpush)
.route("RPUSH", list::rpush)
.route("LPUSHX", list::lpushx)
.route("RPUSHX", list::rpushx)
.route("LPOP", list::lpop)
.route("RPOP", list::rpop)
.route("LLEN", list::llen)
.route("LRANGE", list::lrange)
.route("LINDEX", list::lindex)
.route("LSET", list::lset)
.route("LREM", list::lrem)
.route("LTRIM", list::ltrim)
.route("LINSERT", list::linsert)
.route("RPOPLPUSH", list::rpoplpush)
.route("BLPOP", list::blpop)
.route("BRPOP", list::brpop)
.route("BRPOPLPUSH", list::brpoplpush)
.route("GETBIT", bitmap::getbit)
.route("SETBIT", bitmap::setbit)
.route("BITCOUNT", bitmap::bitcount)
.route("BITPOS", bitmap::bitpos)
.route("BITOP", bitmap::bitop)
.route("BITFIELD", bitfield::bitfield)
.route("PFADD", hll::pfadd)
.route("PFCOUNT", hll::pfcount)
.route("PFMERGE", hll::pfmerge)
.route("GEOADD", geo::geoadd)
.route("GEOPOS", geo::geopos)
.route("GEODIST", geo::geodist)
.route("GEOHASH", geo::geohash)
.route("GEORADIUS", geo::georadius)
.route("GEORADIUSBYMEMBER", geo::georadiusbymember)
.route("SUBSCRIBE", pubsub::subscribe)
.route("UNSUBSCRIBE", pubsub::unsubscribe)
.route("PUBLISH", pubsub::publish)
}