     }
 
     /** Encode a repeated  `fixed32` or `uint32` field */
-    public func encode(tag: UInt32, value: [UInt32]?, encoding: ProtoIntEncoding = .variable, packed: Bool = false) throws {
+    public func encode(tag: UInt32, value: [UInt32]?, encoding: ProtoIntEncoding = .variable, packed: Bool? = nil) throws {
         guard let value = value else { return }
         let wireType: FieldWireType = encoding == .fixed ? .fixed32 : .varint
         try encode(tag: tag, wireType: wireType, value: value, packed: packed) {

     Encode a repeated `bool` field.
     This method is distinct from the generic repeated `ProtoEncodable` one because bools can be packed.
     */
    public func encode(tag: UInt32, value: [Bool]?, packed: Bool = false) throws {
        guard let value = value else { return }

        try encode(tag: tag, wireType: .varint, value: value, packed: packed) { item in

    }

    /** Encoded a repeated `enum` field */
    public func encode<T: RawRepresentable>(tag: UInt32, value: [T]?, packed: Bool? = nil) throws where T.RawValue == UInt32 {
        guard let value = value else { return }
        encode(tag: tag, wireType: .varint, value: value, packed: packed) {
            writeVarint($0.rawValue)
