@@ -659,6 +659,8 @@ 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+ TopicsPolicy topicsPolicy;
662664 @JsonKey (name: 'stream_post_policy' )
663665 ChannelPostPolicy ? channelPostPolicy; // TODO(server-10) remove
664666 // final bool isAnnouncementOnly; // deprecated for `channelPostPolicy`; ignore
@@ -684,6 +686,7 @@ class ZulipStream {
684686 required this .isWebPublic,
685687 required this .historyPublicToSubscribers,
686688 required this .messageRetentionDays,
689+ required this .topicsPolicy,
687690 required this .channelPostPolicy,
688691 required this .folderId,
689692 required this .canAddSubscribersGroup,
@@ -708,6 +711,7 @@ class ZulipStream {
708711 isWebPublic: subscription.isWebPublic,
709712 historyPublicToSubscribers: subscription.historyPublicToSubscribers,
710713 messageRetentionDays: subscription.messageRetentionDays,
714+ topicsPolicy: subscription.topicsPolicy,
711715 channelPostPolicy: subscription.channelPostPolicy,
712716 folderId: subscription.folderId,
713717 canAddSubscribersGroup: subscription.canAddSubscribersGroup,
@@ -744,6 +748,7 @@ enum ChannelPropertyName {
744748 // isWebPublic is updated via its own [ChannelUpdateEvent] field
745749 // historyPublicToSubscribers is updated via its own [ChannelUpdateEvent] field
746750 messageRetentionDays,
751+ topicsPolicy,
747752 @JsonValue ('stream_post_policy' )
748753 channelPostPolicy,
749754 folderId,
@@ -765,6 +770,30 @@ enum ChannelPropertyName {
765770 .map ((key, value) => MapEntry (value, key));
766771}
767772
773+ /// A value of [ZulipStream.topicsPolicy] .
774+ ///
775+ /// For docs, search for "topics_policy"
776+ /// in <https://zulip.com/api/get-stream-by-id>.
777+ @JsonEnum (valueField: 'apiValue' )
778+ enum TopicsPolicy {
779+ inherit (apiValue: 'inherit' ),
780+ allowEmptyTopic (apiValue: 'allow_empty_topic' ),
781+ disableEmptyTopic (apiValue: 'disable_empty_topic' ),
782+ emptyTopicOnly (apiValue: 'empty_topic_only' ),
783+ unknown (apiValue: null );
784+
785+ const TopicsPolicy ({required this .apiValue});
786+
787+ final String ? apiValue;
788+
789+ String ? toJson () => apiValue;
790+
791+ static TopicsPolicy fromApiValue (String value) => _byApiValue[value]! ;
792+
793+ static final _byApiValue = _$TopicsPolicyEnumMap
794+ .map ((key, value) => MapEntry (value, key));
795+ }
796+
768797/// Policy for which users can post to the stream.
769798///
770799/// For docs, search for "stream_post_policy"
@@ -830,6 +859,7 @@ class Subscription extends ZulipStream {
830859 required super .isWebPublic,
831860 required super .historyPublicToSubscribers,
832861 required super .messageRetentionDays,
862+ required super .topicsPolicy,
833863 required super .channelPostPolicy,
834864 required super .folderId,
835865 required super .canAddSubscribersGroup,
0 commit comments