@@ -320,114 +320,110 @@ func (j *BatchSpanProcessor) UnmarshalJSON(b []byte) error {
320320
321321// UnmarshalJSON implements json.Unmarshaler.
322322func (j * OpenTelemetryConfiguration ) UnmarshalJSON (b []byte ) error {
323- var raw map [string ]any
324- if err := json .Unmarshal (b , & raw ); err != nil {
325- return errors .Join (newErrUnmarshal (j ), err )
323+ type Plain OpenTelemetryConfiguration
324+ type shadow struct {
325+ Plain
326+ FileFormat json.RawMessage `json:"file_format"`
327+ LoggerProvider json.RawMessage `json:"logger_provider"`
328+ MeterProvider json.RawMessage `json:"meter_provider"`
329+ TracerProvider json.RawMessage `json:"tracer_provider"`
330+ Propagator json.RawMessage `json:"propagator"`
331+ Resource json.RawMessage `json:"resource"`
332+ InstrumentationDevelopment json.RawMessage `json:"instrumentation/development"`
333+ AttributeLimits json.RawMessage `json:"attribute_limits"`
334+ Disabled json.RawMessage `json:"disabled"`
335+ LogLevel json.RawMessage `json:"log_level"`
326336 }
327- if _ , ok := raw ["file_format" ]; raw != nil && ! ok {
328- return errors .New ("field file_format in OpenTelemetryConfiguration: required" )
337+ var sh shadow
338+ if err := json .Unmarshal (b , & sh ); err != nil {
339+ return errors .Join (newErrUnmarshal (j ), err )
329340 }
330- type Plain OpenTelemetryConfiguration
331- var plain Plain
332341
333- if v , ok := raw ["logger_provider" ]; ok && v != nil {
334- marshaled , err := json .Marshal (v )
335- if err != nil {
336- return errors .Join (newErrUnmarshal (j ), err )
337- }
338- var lp LoggerProviderJson
339- if err := json .Unmarshal (marshaled , & lp ); err != nil {
340- return errors .Join (newErrUnmarshal (j ), err )
341- }
342- plain .LoggerProvider = & lp
342+ if len (sh .FileFormat ) == 0 {
343+ return newErrRequired (j , "file_format" )
343344 }
344345
345- if v , ok := raw ["meter_provider" ]; ok && v != nil {
346- marshaled , err := json .Marshal (v )
347- if err != nil {
348- return errors .Join (newErrUnmarshal (j ), err )
349- }
350-
351- var mp MeterProviderJson
352- if err := json .Unmarshal (marshaled , & mp ); err != nil {
353- return errors .Join (newErrUnmarshal (j ), err )
354- }
355- plain .MeterProvider = & mp
346+ if err := json .Unmarshal (sh .FileFormat , & sh .Plain .FileFormat ); err != nil {
347+ return errors .Join (newErrUnmarshal (j ), err )
356348 }
357349
358- if v , ok := raw [ "tracer_provider" ]; ok && v != nil {
359- marshaled , err := json . Marshal ( v )
360- if err != nil {
350+ if sh . LoggerProvider != nil {
351+ var l LoggerProviderJson
352+ if err := json . Unmarshal ( sh . LoggerProvider , & l ); err != nil {
361353 return errors .Join (newErrUnmarshal (j ), err )
362354 }
355+ sh .Plain .LoggerProvider = & l
356+ }
363357
364- var tp TracerProviderJson
365- if err := json .Unmarshal (marshaled , & tp ); err != nil {
358+ if sh .MeterProvider != nil {
359+ var m MeterProviderJson
360+ if err := json .Unmarshal (sh .MeterProvider , & m ); err != nil {
366361 return errors .Join (newErrUnmarshal (j ), err )
367362 }
368- plain . TracerProvider = & tp
363+ sh . Plain . MeterProvider = & m
369364 }
370365
371- if v , ok := raw [ "propagator" ]; ok && v != nil {
372- marshaled , err := json . Marshal ( v )
373- if err != nil {
366+ if sh . TracerProvider != nil {
367+ var t TracerProviderJson
368+ if err := json . Unmarshal ( sh . TracerProvider , & t ); err != nil {
374369 return errors .Join (newErrUnmarshal (j ), err )
375370 }
371+ sh .Plain .TracerProvider = & t
372+ }
376373
374+ if sh .Propagator != nil {
377375 var p PropagatorJson
378- if err := json .Unmarshal (marshaled , & p ); err != nil {
376+ if err := json .Unmarshal (sh . Propagator , & p ); err != nil {
379377 return errors .Join (newErrUnmarshal (j ), err )
380378 }
381- plain .Propagator = & p
379+ sh . Plain .Propagator = & p
382380 }
383381
384- if v , ok := raw ["resource" ]; ok && v != nil {
385- marshaled , err := json .Marshal (v )
386- if err != nil {
387- return errors .Join (newErrUnmarshal (j ), err )
388- }
389-
382+ if sh .Resource != nil {
390383 var r ResourceJson
391- if err := json .Unmarshal (marshaled , & r ); err != nil {
384+ if err := json .Unmarshal (sh . Resource , & r ); err != nil {
392385 return errors .Join (newErrUnmarshal (j ), err )
393386 }
394- plain .Resource = & r
387+ sh . Plain .Resource = & r
395388 }
396389
397- if v , ok := raw [ "instrumentation/development" ]; ok && v != nil {
398- marshaled , err := json . Marshal ( v )
399- if err != nil {
390+ if sh . InstrumentationDevelopment != nil {
391+ var r InstrumentationJson
392+ if err := json . Unmarshal ( sh . InstrumentationDevelopment , & r ); err != nil {
400393 return errors .Join (newErrUnmarshal (j ), err )
401394 }
395+ sh .Plain .InstrumentationDevelopment = & r
396+ }
402397
403- var i InstrumentationJson
404- if err := json .Unmarshal (marshaled , & i ); err != nil {
398+ if sh .AttributeLimits != nil {
399+ var r AttributeLimits
400+ if err := json .Unmarshal (sh .AttributeLimits , & r ); err != nil {
405401 return errors .Join (newErrUnmarshal (j ), err )
406402 }
407- plain . InstrumentationDevelopment = & i
403+ sh . Plain . AttributeLimits = & r
408404 }
409405
410- if v , ok := raw ["attribute_limits" ]; ok && v != nil {
411- marshaled , err := json .Marshal (v )
412- if err != nil {
406+ if sh .Disabled != nil {
407+ if err := json .Unmarshal (sh .Disabled , & sh .Plain .Disabled ); err != nil {
413408 return errors .Join (newErrUnmarshal (j ), err )
414409 }
410+ } else {
411+ // Configure if the SDK is disabled or not.
412+ // If omitted or null, false is used.
413+ sh .Plain .Disabled = ptr (false )
414+ }
415415
416- var a AttributeLimits
417- if err := json .Unmarshal (marshaled , & a ); err != nil {
416+ if sh . LogLevel != nil {
417+ if err := json .Unmarshal (sh . LogLevel , & sh . Plain . LogLevel ); err != nil {
418418 return errors .Join (newErrUnmarshal (j ), err )
419419 }
420- plain .AttributeLimits = & a
421- }
422-
423- plainConfig := (* OpenTelemetryConfiguration )(& plain )
424- if err := setConfigDefaults (raw , plainConfig , jsonCodec {}); err != nil {
425- return errors .Join (newErrUnmarshal (j ), err )
420+ } else {
421+ // Configure the log level of the internal logger used by the SDK.
422+ // If omitted, info is used.
423+ sh .Plain .LogLevel = ptr ("info" )
426424 }
427425
428- plain .FileFormat = fmt .Sprintf ("%v" , raw ["file_format" ])
429-
430- * j = OpenTelemetryConfiguration (plain )
426+ * j = OpenTelemetryConfiguration (sh .Plain )
431427 return nil
432428}
433429
0 commit comments