      Encode a repeated `float` field.
      This method is distinct from the generic repeated `ProtoEncodable` one because floats can be packed.
      */
-    public func encode(tag: UInt32, value: [Float]?, packed: Bool? = nil) throws {
-        guard let value = value else { return }
+    public func encode(tag: UInt32, value: [Float], packed: Bool? = nil) throws {
+        guard !value.isEmpty else { return }
 
         try encode(tag: tag, wireType: .fixed32, value: value, packed: packed) { item in
             try item.encode(to: self)

    }

    /** Encode a repeated `bytes` field */
    public func encode(tag: UInt32, value: [Data]?) throws {
        guard let value = value else { return }

        let key = ProtoWriter.makeFieldKey(tag: tag, wireType: .lengthDelimited)
        for item in value {

    }

    /** Encode a repeated `int32`, `sfixed32`, or `sint32` field */
    public func encode(tag: UInt32, value: [Int32], encoding: ProtoIntEncoding = .variable, packed: Bool? = nil) throws {
        guard !value.isEmpty else { return }

        let wireType: FieldWireType = encoding == .fixed ? .fixed32 : .varint
        try encode(tag: tag, wireType: wireType, value: value, packed: packed) {
            try $0.encode(to: self, encoding: encoding)
