module cerealed.attrs;


import std.typetuple;


template getNumBits(T) {
    static if(is(T:Bits!N, int N)) {
        enum getNumBits = N;
    } else {
        enum getNumBits = 0;
    }
}


enum isABitsStruct(alias T) = is(T) && is(T:Bits!N, int N);


struct Bits(int N) if(N > 0 && N <= 32) {
}

enum NoCereal;
enum RawArray;

alias RestOfPacket = RawArray;

struct ArrayLength {
    string member;
}


enum isArrayLengthStruct(alias T) = is(typeof(T)) && is(typeof(T) == ArrayLength);

unittest {
    auto l = ArrayLength();
    static assert(isArrayLengthStruct!l);
}


struct LengthInBytes {
    string member;
}


enum isLengthInBytesStruct(alias T) = is(typeof(T)) && is(typeof(T) == LengthInBytes);

unittest {
    auto l = LengthInBytes();
    static assert(isLengthInBytesStruct!l);
}