@@ -659,6 +659,9 @@ class ZulipStream {
659659 bool isWebPublic; // present since 2.1, according to /api/changelog
660660 bool historyPublicToSubscribers;
661661 int ? messageRetentionDays;
662+ @JsonKey (defaultValue: TopicsPolicy .inherit, // TODO(server-11) remove default value
663+ unknownEnumValue: TopicsPolicy .unknown)
664+ TopicsPolicy topicsPolicy;
662665 @JsonKey (name: 'stream_post_policy' )
663666 ChannelPostPolicy ? channelPostPolicy; // TODO(server-10) remove
664667 // final bool isAnnouncementOnly; // deprecated for `channelPostPolicy`; ignore
@@ -684,6 +687,7 @@ class ZulipStream {
684687 required this .isWebPublic,
685688 required this .historyPublicToSubscribers,
686689 required this .messageRetentionDays,
690+ required this .topicsPolicy,
687691 required this .channelPostPolicy,
688692 required this .folderId,
689693 required this .canAddSubscribersGroup,
@@ -708,6 +712,7 @@ class ZulipStream {
708712 isWebPublic: subscription.isWebPublic,
709713 historyPublicToSubscribers: subscription.historyPublicToSubscribers,
710714 messageRetentionDays: subscription.messageRetentionDays,
715+ topicsPolicy: subscription.topicsPolicy,
711716 channelPostPolicy: subscription.channelPostPolicy,
712717 folderId: subscription.folderId,
713718 canAddSubscribersGroup: subscription.canAddSubscribersGroup,
@@ -744,6 +749,7 @@ enum ChannelPropertyName {
744749 // isWebPublic is updated via its own [ChannelUpdateEvent] field
745750 // historyPublicToSubscribers is updated via its own [ChannelUpdateEvent] field
746751 messageRetentionDays,
752+ topicsPolicy,
747753 @JsonValue ('stream_post_policy' )
748754 channelPostPolicy,
749755 folderId,
@@ -765,6 +771,30 @@ enum ChannelPropertyName {
765771 .map ((key, value) => MapEntry (value, key));
766772}
767773
774+ /// A value of [ZulipStream.topicsPolicy] .
775+ ///
776+ /// For docs, search for "topics_policy"
777+ /// in <https://zulip.com/api/get-stream-by-id>.
778+ @JsonEnum (valueField: 'apiValue' )
779+ enum TopicsPolicy {
780+ inherit (apiValue: 'inherit' ),
781+ allowEmptyTopic (apiValue: 'allow_empty_topic' ),
782+ disableEmptyTopic (apiValue: 'disable_empty_topic' ),
783+ emptyTopicOnly (apiValue: 'empty_topic_only' ),
784+ unknown (apiValue: null );
785+
786+ const TopicsPolicy ({required this .apiValue});
787+
788+ final String ? apiValue;
789+
790+ String ? toJson () => apiValue;
791+
792+ static TopicsPolicy fromApiValue (String value) => _byApiValue[value] ?? unknown;
793+
794+ static final _byApiValue = _$TopicsPolicyEnumMap
795+ .map ((key, value) => MapEntry (value, key));
796+ }
797+
768798/// Policy for which users can post to the stream.
769799///
770800/// For docs, search for "stream_post_policy"
@@ -830,6 +860,7 @@ class Subscription extends ZulipStream {
830860 required super .isWebPublic,
831861 required super .historyPublicToSubscribers,
832862 required super .messageRetentionDays,
863+ required super .topicsPolicy,
833864 required super .channelPostPolicy,
834865 required super .folderId,
835866 required super .canAddSubscribersGroup,
0 commit comments