Skip to content

Commit 8cdf88b

Browse files
committed
Add repeatedMessageBuilder.
1 parent 22772e3 commit 8cdf88b

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/Proto3/Wire/Encode.hs

+13
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ module Proto3.Wire.Encode
9494
, shortByteString
9595
-- * Embedded Messages
9696
, embedded
97+
-- * Folds
98+
, repeatedMessageBuilder
9799
-- * Packed repeated fields
98100
, packedVarints
99101
, packedVarintsR
@@ -578,6 +580,17 @@ shortByteString :: FieldNumber -> BS.ShortByteString -> MessageBuilder
578580
shortByteString num = embedded num . MessageBuilder . RB.shortByteString
579581
{-# INLINE shortByteString #-}
580582

583+
-- | Concatenates the given builders, which typically build fields within the same message.
584+
--
585+
-- For example:
586+
--
587+
-- >>> repeatedMessageBuilder @[MessageBuilder] [1 `bool` True, 2 `int32` 42]
588+
-- Proto3.Wire.Encode.unsafeFromLazyByteString "\b\SOH\DLE*"
589+
repeatedMessageBuilder :: ToRepeated c MessageBuilder => c -> MessageBuilder
590+
repeatedMessageBuilder =
591+
etaMessageBuilder (MessageBuilder . RB.repeatedBuildR . mapRepeated reverseMessageBuilder)
592+
{-# INLINE repeatedMessageBuilder #-}
593+
581594
-- | Encodes a packed repeated field whose elements may vary in width.
582595
packedVariableWidthFieldR ::
583596
ToRepeated c a => (a -> RB.BuildR) -> FieldNumber -> c -> MessageBuilder

0 commit comments

Comments
 (0)