code: def validate_nexson(obj, warning_codes_to_skip=None, retain_deprecated=True, **kwargs):
      
      if warning_codes_to_skip:
          v = FilteringLogger(codes_to_skip=list(warning_codes_to_skip), store_messages=True)
      else:
          v = ValidationLogger(store_messages=True)
      v.retain_deprecated = retain_deprecated
      n = create_validation_adaptor(obj, v, **kwargs)
      return v, n
docs: Takes an `obj` that is a NexSON object.
      `warning_codes_to_skip` is None or an iterable collection of integers
          that correspond to facets of NexsonWarningCodes. Warnings associated
          with any code in the list will be suppressed.
      `retain_deprecated` if False, then `obj` may be modified to replace
          deprecated constructs with new syntax. If it is True, the `obj` will
          not be modified.
      Returns the pair:
          validatation_log, adaptor
      `validatation_log` will be an instance of type nexson_validation.logger.DefaultRichLogger
          it will hold warning and error messages.
      `adaptor` will be an instance of nexson_validation.nexson_adaptor.NexsonValidationAdaptor
          it holds a reference to `obj` and the bookkeepping data necessary to attach
          the log message to `obj` if