private static Span.Types.Attributes FromIAttributes(IAttributes source)
        {
            var attributes = new Span.Types.Attributes
            {
                DroppedAttributesCount = source.DroppedAttributesCount,
            };

            attributes.AttributeMap.Add(source.AttributeMap.ToDictionary(
                                            kvp => kvp.Key,
                                            kvp => kvp.Value.Match(
                                                s => new OpenTelemetry.Proto.Trace.V1.AttributeValue {
                StringValue = new TruncatableString()
                {
                    Value = s
                }
            },
                                                b => new OpenTelemetry.Proto.Trace.V1.AttributeValue {
                BoolValue = b
            },
                                                l => new OpenTelemetry.Proto.Trace.V1.AttributeValue {
                IntValue = l
            },
                                                d => new OpenTelemetry.Proto.Trace.V1.AttributeValue {
                DoubleValue = d
            },
                                                o => new OpenTelemetry.Proto.Trace.V1.AttributeValue {
                StringValue = new TruncatableString()
                {
                    Value = o?.ToString()
                }
            })));

            return(attributes);
        }
        private static Span.Types.Attributes FromIAttributeMap(IDictionary <string, IAttributeValue> source)
        {
            var attributes = new Span.Types.Attributes();

            attributes.AttributeMap.Add(source.ToDictionary(
                                            kvp => kvp.Key,
                                            kvp => kvp.Value.Match(
                                                s => new Opencensus.Proto.Trace.V1.AttributeValue {
                StringValue = new TruncatableString()
                {
                    Value = s
                }
            },
                                                b => new Opencensus.Proto.Trace.V1.AttributeValue {
                BoolValue = b
            },
                                                l => new Opencensus.Proto.Trace.V1.AttributeValue {
                IntValue = l
            },
                                                d => new Opencensus.Proto.Trace.V1.AttributeValue {
                DoubleValue = d
            },
                                                o => new Opencensus.Proto.Trace.V1.AttributeValue {
                StringValue = new TruncatableString()
                {
                    Value = o?.ToString()
                }
            })));

            return(attributes);
        }