public override void PostConfigure()

in src/Azure.IIoT.OpcUa.Publisher/src/Runtime/PublisherConfig.cs [152:449]


        public override void PostConfigure(string? name, PublisherOptions options)
        {
            options.DisableResourceMonitoring ??= GetBoolOrNull(DisableResourceMonitoringKey);
            options.PublisherId ??= GetStringOrDefault(PublisherIdKey,
                    _identity?.Identity ?? Dns.GetHostName());

            options.SiteId ??= GetStringOrDefault(SiteIdKey);

            options.PublishedNodesFile ??= GetStringOrDefault(PublishedNodesFileKey);
            options.UseFileChangePolling ??= GetBoolOrNull(UseFileChangePollingKey);

            if (options.DefaultTransport == null && Enum.TryParse<WriterGroupTransport>(
                GetStringOrDefault(DefaultTransportKey), out var transport))
            {
                options.DefaultTransport = transport;
            }

            options.UseStandardsCompliantEncoding ??= GetBoolOrDefault(
                    UseStandardsCompliantEncodingKey, UseStandardsCompliantEncodingDefault);

            if (options.MessagingProfile == null)
            {
                if (!Enum.TryParse<MessagingMode>(GetStringOrDefault(MessagingModeKey),
                    out var messagingMode))
                {
                    messagingMode = options.UseStandardsCompliantEncoding == true ?
                        MessagingMode.PubSub : MessagingMode.Samples;
                }

                if (GetBoolOrDefault(FullFeaturedMessageKey, false))
                {
                    if (messagingMode == MessagingMode.PubSub)
                    {
                        messagingMode = MessagingMode.FullNetworkMessages;
                    }
                    if (messagingMode == MessagingMode.Samples)
                    {
                        messagingMode = MessagingMode.FullSamples;
                    }
                }

                if (!Enum.TryParse<MessageEncoding>(GetStringOrDefault(MessageEncodingKey),
                    out var messageEncoding))
                {
                    messageEncoding = MessageEncodingDefault;
                }

                if (!MessagingProfile.IsSupported(messagingMode, messageEncoding))
                {
                    var supported = MessagingProfile.Supported
                        .Select(p => $"\n(--mm {p.MessagingMode} and --me {p.MessageEncoding})")
                        .Aggregate((a, b) => $"{a}, {b}");
                    throw new ConfigurationErrorsException(
                        "The specified combination of --mm, and --me is not (yet) supported." +
                        $" Currently supported combinations are: {supported}");
                }
                options.MessagingProfile = MessagingProfile.Get(messagingMode, messageEncoding);
            }

            options.CreatePublishFileIfNotExist ??= GetBoolOrNull(
                    CreatePublishFileIfNotExistKey);

            options.RenewTlsCertificateOnStartup ??= GetBoolOrNull(
                    RenewTlsCertificateOnStartupKey);

            if (options.MaxNodesPerDataSet == 0)
            {
                options.MaxNodesPerDataSet = GetIntOrDefault(MaxNodesPerDataSetKey,
                    MaxNodesPerDataSetDefault);
            }

            //
            // Default to batch size of 50 if not using strict encoding and a
            // transport was not specified to support backcompat with 2.8
            //
            options.BatchSize ??= GetIntOrDefault(BatchSizeKey,
                    options.UseStandardsCompliantEncoding == true ||
                    options.DefaultTransport != null ? 0 : BatchSizeLegacyDefault);

            if (options.BatchTriggerInterval == null)
            {
                //
                // Default to batch interval of 10 seconds if not using strict encoding
                // and a transport was not specified to support backcompat with 2.8
                //
                options.BatchTriggerInterval = GetDurationOrNull(BatchTriggerIntervalKey) ??
                    TimeSpan.FromMilliseconds(GetIntOrDefault(BatchTriggerIntervalKey,
                        options.UseStandardsCompliantEncoding == true ||
                        options.DefaultTransport != null ? 0 : BatchTriggerIntervalLLegacyDefaultMillis));
            }

            options.WriteValueWhenDataSetHasSingleEntry
                ??= GetBoolOrNull(WriteValueWhenDataSetHasSingleEntryKey);
            options.RemoveDuplicatesFromBatch ??= GetBoolOrNull(RemoveDuplicatesFromBatchKey);

            options.MaxNetworkMessageSendQueueSize ??= GetIntOrDefault(MaxNetworkMessageSendQueueSizeKey,
                    MaxNetworkMessageSendQueueSizeDefault);

            options.DefaultWriterGroupPartitions ??= GetIntOrNull(DefaultWriterGroupPartitionCountKey);
            options.IgnoreConfiguredPublishingIntervals ??= GetBoolOrDefault(IgnoreConfiguredPublishingIntervalsKey,
                    IgnoreConfiguredPublishingIntervalsDefault);

            if (options.TopicTemplates.Root == null)
            {
                options.TopicTemplates.Root = GetStringOrDefault(
                    RootTopicTemplateKey, RootTopicTemplateDefault);
            }

            if (options.TopicTemplates.Method == null)
            {
                options.TopicTemplates.Method = GetStringOrDefault(
                    MethodTopicTemplateKey, MethodTopicTemplateDefault);
            }

            if (options.TopicTemplates.Events == null)
            {
                options.TopicTemplates.Events = GetStringOrDefault(
                    EventsTopicTemplateKey, EventsTopicTemplateDefault);
            }

            if (options.TopicTemplates.Diagnostics == null)
            {
                options.TopicTemplates.Diagnostics = GetStringOrDefault(
                    DiagnosticsTopicTemplateKey, DiagnosticsTopicTemplateDefault);
            }

            if (options.TopicTemplates.Telemetry == null)
            {
                options.TopicTemplates.Telemetry = GetStringOrDefault(
                    TelemetryTopicTemplateKey,
                        TelemetryTopicTemplateDefault);
            }

            if (options.TopicTemplates.DataSetMetaData == null)
            {
                options.TopicTemplates.DataSetMetaData = GetStringOrDefault(
                    DataSetMetaDataTopicTemplateKey);
            }

            if (options.TopicTemplates.Schema == null)
            {
                options.TopicTemplates.Schema = GetStringOrDefault(
                    SchemaTopicTemplateKey, SchemaTopicTemplateDefault);
            }

            options.DisableOpenApiEndpoint ??= GetBoolOrNull(DisableOpenApiEndpointKey);

            options.EnableRuntimeStateReporting ??= GetBoolOrDefault(
                    EnableRuntimeStateReportingKey, EnableRuntimeStateReportingDefault);

            options.RuntimeStateRoutingInfo ??= GetStringOrDefault(
                    RuntimeStateRoutingInfoKey, RuntimeStateRoutingInfoDefault);

            options.ScaleTestCount ??= GetIntOrDefault(ScaleTestCountKey,
                    ScaleTestCountDefault);

            if (options.DebugLogNotificationsFilter == null)
            {
                options.DebugLogNotificationsFilter =
                    GetStringOrDefault(DebugLogNotificationsFilterKey);
                options.DebugLogNotifications ??=
                    (options.DebugLogNotificationsFilter != null ? true : null);
            }

            if (options.DebugLogNotificationsWithHeartbeat == null)
            {
                options.DebugLogNotificationsWithHeartbeat =
                    GetBoolOrDefault(DebugLogNotificationsWithHeartbeatKey);
                options.DebugLogNotifications ??= options.DebugLogNotifications;
            }

            options.DebugLogNotifications ??= GetBoolOrDefault(DebugLogNotificationsKey);
            options.DebugLogEncodedNotifications ??= GetBoolOrDefault(DebugLogEncodedNotificationsKey);

            if (options.DiagnosticsInterval == null)
            {
                options.DiagnosticsInterval = GetDurationOrNull(DiagnosticsIntervalKey) ??
                   TimeSpan.FromMilliseconds(GetIntOrDefault(DiagnosticsIntervalKey,
                       DiagnosticsIntervalDefaultMillis));
            }

            if (options.DiagnosticsTarget == null)
            {
                if (!Enum.TryParse<PublisherDiagnosticTargetType>(
                    GetStringOrDefault(DiagnosticsTargetKey), out var target))
                {
                    target = PublisherDiagnosticTargetType.Logger;
                }
                options.DiagnosticsTarget = target;
            }

            options.EnableDataSetRoutingInfo ??= GetBoolOrDefault(
                    EnableDataSetRoutingInfoKey, EnableDataSetRoutingInfoDefault);

            options.ForceCredentialEncryption ??= GetBoolOrDefault(
                    ForceCredentialEncryptionKey);

            options.MaxNetworkMessageSize ??= GetIntOrNull(IoTHubMaxMessageSizeKey);

            options.DefaultMaxDataSetMessagesPerPublish ??= (uint?)GetIntOrNull(
                    DefaultMaxMessagesPerPublishKey);

            if (options.DefaultQualityOfService == null)
            {
                if (!Enum.TryParse<QoS>(GetStringOrDefault(DefaultQualityOfServiceKey),
                    out var qos))
                {
                    qos = QoS.AtLeastOnce;
                }
                options.DefaultQualityOfService = qos;
            }

            if (options.DefaultMessageTimeToLive == null)
            {
                var ttl = GetIntOrNull(DefaultMessageTimeToLiveKey);
                options.DefaultMessageTimeToLive = ttl.HasValue ?
                    TimeSpan.FromMilliseconds(ttl.Value) : GetDurationOrNull(
                        DefaultMessageTimeToLiveKey);
            }
            options.DefaultMessageRetention = GetBoolOrNull(DefaultMessageRetentionKey);

            if (options.MessageTimestamp == null)
            {
                if (!Enum.TryParse<MessageTimestamp>(GetStringOrDefault(MessageTimestampKey),
                    out var messageTimestamp))
                {
                    messageTimestamp = MessageTimestamp.CurrentTimeUtc;
                }
                options.MessageTimestamp = messageTimestamp;
            }

            if (options.DefaultNamespaceFormat == null)
            {
                if (!Enum.TryParse<NamespaceFormat>(GetStringOrDefault(DefaultNamespaceFormatKey),
                    out var namespaceFormat))
                {
                    namespaceFormat = options.UseStandardsCompliantEncoding == true ?
                        NamespaceFormat.Expanded : NamespaceFormat.Uri;
                }
                options.DefaultNamespaceFormat = namespaceFormat;
            }

            options.UnsecureHttpServerPort ??= GetIntOrNull(
                    UnsecureHttpServerPortKey, UnsecureHttpServerPortDefault);
            options.HttpServerPort ??= GetIntOrNull(
                    HttpServerPortKey, HttpServerPortDefault);

            options.ApiKeyOverride ??= GetStringOrDefault(ApiKeyOverrideKey);

            if (options.DefaultDataSetRouting == null &&
                Enum.TryParse<DataSetRoutingMode>(GetStringOrDefault(DefaultDataSetRoutingKey),
                    out var routingMode))
            {
                options.DefaultDataSetRouting = routingMode;
            }

            var schemaNamespace = GetStringOrDefault(SchemaNamespaceKey);
            var avroPreferred = GetBoolOrNull(PreferAvroOverJsonSchemaKey);
            if (schemaNamespace != null || avroPreferred != null ||
                GetBoolOrDefault(PublishMessageSchemaKey))
            {
                options.SchemaOptions ??= new SchemaOptions();
            }
            if (options.SchemaOptions != null)
            {
                options.SchemaOptions.Namespace ??= schemaNamespace;
                options.SchemaOptions.PreferAvroOverJsonSchema ??= avroPreferred;
            }

            options.DisableComplexTypeSystem ??= GetBoolOrNull(DisableComplexTypeSystemKey);
            options.DisableDataSetMetaData = options.DisableComplexTypeSystem;
            // Set a default from the strict setting
            options.DisableDataSetMetaData ??= GetBoolOrDefault(DisableDataSetMetaDataKey,
                !(options.UseStandardsCompliantEncoding ?? false));
            if (options.SchemaOptions != null)
            {
                // Always turn on metadata for schema publishing
                options.DisableComplexTypeSystem = false;
                options.DisableDataSetMetaData = false;
            }
            if (options.DefaultMetaDataUpdateTime == null && options.DisableDataSetMetaData != true)
            {
                options.DefaultMetaDataUpdateTime = GetDurationOrNull(DefaultMetaDataUpdateTimeKey);
            }
            if (options.AsyncMetaDataLoadTimeout == null && options.DisableDataSetMetaData != true)
            {
                options.AsyncMetaDataLoadTimeout = GetDurationOrDefault(AsyncMetaDataLoadTimeoutKey,
                    TimeSpan.FromMilliseconds(AsyncMetaDataLoadTimeoutDefaultMillis));
            }
            options.EnableDataSetKeepAlives ??= GetBoolOrDefault(EnableDataSetKeepAlivesKey);
            options.DefaultKeyFrameCount ??= (uint?)GetIntOrNull(DefaultKeyFrameCountKey);

            options.DisableSessionPerWriterGroup ??= GetBoolOrDefault(DisableSessionPerWriterGroupKey,
                    DisableSessionPerWriterGroupDefault);

            options.DefaultUseReverseConnect ??= GetBoolOrNull(DefaultUseReverseConnectKey);
            options.DisableSubscriptionTransfer ??= GetBoolOrNull(DisableSubscriptionTransferKey);
        }