sig
  module type Json_type =
    sig
      type t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Json_type.t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : Sarif.Json_type.t -> Yojson.Safe.t
    end
  module type Json_default =
    sig
      type t
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val default : t
    end
  module Json_string :
    sig
      type t = string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
    end
  type 'a dict = (string * 'a) list
  module Json_dictionary :
    functor (J : Json_type->
      sig
        type t = J.t dict
        val of_yojson :
          Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
        val to_yojson : t -> Yojson.Safe.t
      end
  module JsonStringDictionary :
    sig
      type t = string dict
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
    end
  module Uri :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val sarif_github : t
    end
  module Version :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val v2_1_0 : t
    end
  module ArtifactLocation :
    sig
      type t = { uri : string; uriBaseId : string; }
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ArtifactLocation.t Ppx_deriving_yojson_runtime.error_or
      val create :
        uri:string -> ?uriBaseId:string -> unit -> Sarif.ArtifactLocation.t
      val of_loc : Cil_datatype.Location.t -> Sarif.ArtifactLocation.t
      val default : Sarif.ArtifactLocation.t
    end
  module ArtifactLocationDictionary :
    sig
      type t = ArtifactLocation.t dict
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
    end
  module Custom_properties :
    sig
      type t = Yojson.Safe.t dict
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
    end
  module Properties :
    sig
      type tags = string list
      type t = {
        tags : Sarif.Properties.tags;
        additional_properties : Sarif.Custom_properties.t;
      }
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Properties.t Ppx_deriving_yojson_runtime.error_or
      val create : Sarif.Custom_properties.t -> Sarif.Properties.t
      val default : Sarif.Properties.t
    end
  module Message :
    sig
      type t = {
        text : string;
        id : string;
        markdown : string;
        arguments : string list;
        properties : Sarif.Properties.t;
      }
      val of_yojson :
        Yojson.Safe.t -> Sarif.Message.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?text:string ->
        ?id:string ->
        ?markdown:string ->
        ?arguments:string list ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.Message.t
      val plain_text :
        text:string ->
        ?id:string -> ?arguments:string list -> unit -> Sarif.Message.t
      val markdown :
        markdown:Markdown.elements ->
        ?id:string -> ?arguments:string list -> unit -> Sarif.Message.t
    end
  module MultiformatMessageString :
    sig
      type t = {
        text : string;
        markdown : string;
        properties : Sarif.Properties.t;
      }
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.MultiformatMessageString.t Ppx_deriving_yojson_runtime.error_or
      val create :
        text:string ->
        ?markdown:string ->
        ?properties:Sarif.Properties.t ->
        unit -> Sarif.MultiformatMessageString.t
      val default : Sarif.MultiformatMessageString.t
    end
  module MultiformatMessageStringDictionary :
    sig
      type t = MultiformatMessageString.t dict
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
    end
  module ArtifactContent :
    sig
      type t = {
        text : string;
        binary : string;
        rendered : Sarif.MultiformatMessageString.t;
        properties : Sarif.Properties.t;
      }
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ArtifactContent.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?text:string ->
        ?binary:string ->
        ?rendered:Sarif.MultiformatMessageString.t ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.ArtifactContent.t
      val default : Sarif.ArtifactContent.t
    end
  module Region :
    sig
      type t = {
        startLine : int;
        startColumn : int;
        endLine : int;
        endColumn : int;
        charOffset : int;
        charLength : int;
        byteOffset : int;
        byteLength : int;
        snippet : Sarif.ArtifactContent.t;
        message : Sarif.Message.t;
      }
      val to_yojson : Sarif.Region.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Region.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?startLine:int ->
        ?startColumn:int ->
        ?endLine:int ->
        ?endColumn:int ->
        ?charOffset:int ->
        ?charLength:int ->
        ?byteOffset:int ->
        ?byteLength:int ->
        ?snippet:Sarif.ArtifactContent.t ->
        ?message:Sarif.Message.t -> unit -> Sarif.Region.t
      val default : Sarif.Region.t
      val of_loc : Cil_datatype.Location.t -> Sarif.Region.t
    end
  module Rectangle :
    sig
      type t = {
        top : float;
        left : float;
        bottom : float;
        right : float;
        message : Sarif.Message.t;
      }
      val to_yojson : Sarif.Rectangle.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Rectangle.t Ppx_deriving_yojson_runtime.error_or
    end
  module PhysicalLocation :
    sig
      type t = {
        id : string;
        artifactLocation : Sarif.ArtifactLocation.t;
        region : Sarif.Region.t;
        contextRegion : Sarif.Region.t;
      }
      val to_yojson : Sarif.PhysicalLocation.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.PhysicalLocation.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?id:string ->
        artifactLocation:Sarif.ArtifactLocation.t ->
        ?region:Sarif.Region.t ->
        ?contextRegion:Sarif.Region.t -> unit -> Sarif.PhysicalLocation.t
      val default : Sarif.PhysicalLocation.t
      val of_loc : Cil_datatype.Location.t -> Sarif.PhysicalLocation.t
    end
  module Location :
    sig
      type t = {
        physicalLocation : Sarif.PhysicalLocation.t;
        fullyQualifiedLogicalName : string;
        message : Sarif.Message.t;
        annotations : Sarif.Region.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Location.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Location.t Ppx_deriving_yojson_runtime.error_or
      val create :
        physicalLocation:Sarif.PhysicalLocation.t ->
        ?fullyQualifiedLogicalName:string ->
        ?message:Sarif.Message.t ->
        ?annotations:Sarif.Region.t list ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.Location.t
      val default : Sarif.Location.t
      val of_loc : Cil_datatype.Location.t -> Sarif.Location.t
    end
  module StackFrame :
    sig
      type t = {
        location : Sarif.Location.t;
        stack_module : string;
        threadId : int;
        address : int;
        offset : int;
        parameters : string list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.StackFrame.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.StackFrame.t Ppx_deriving_yojson_runtime.error_or
    end
  module Stack :
    sig
      type t = {
        message : Sarif.Message.t;
        frames : Sarif.StackFrame.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Stack.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Stack.t Ppx_deriving_yojson_runtime.error_or
      val default : Sarif.Stack.t
    end
  module Additional_properties :
    sig
      type t = string dict
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val default : t
    end
  module Stl_importance :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val important : t
      val essential : t
      val unimportant : t
    end
  module ThreadFlowLocation :
    sig
      type t = {
        step : int;
        location : Sarif.Location.t;
        stack : Sarif.Stack.t;
        kind : string;
        tfl_module : string;
        state : Sarif.Additional_properties.t;
        nestingLevel : int;
        executionOrder : int;
        timestamp : string;
        importance : Sarif.Stl_importance.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.ThreadFlowLocation.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ThreadFlowLocation.t Ppx_deriving_yojson_runtime.error_or
    end
  module ThreadFlow :
    sig
      type t = {
        id : string;
        message : Sarif.Message.t;
        locations : Sarif.ThreadFlowLocation.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.ThreadFlow.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ThreadFlow.t Ppx_deriving_yojson_runtime.error_or
    end
  module Attachment :
    sig
      type t = {
        description : Sarif.Message.t;
        artifactLocation : Sarif.ArtifactLocation.t;
        regions : Sarif.Region.t list;
        rectangles : Sarif.Rectangle.t list;
      }
      val to_yojson : Sarif.Attachment.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Attachment.t Ppx_deriving_yojson_runtime.error_or
    end
  module CodeFlow :
    sig
      type t = {
        description : Sarif.Message.t;
        threadFlows : Sarif.ThreadFlow.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.CodeFlow.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.CodeFlow.t Ppx_deriving_yojson_runtime.error_or
    end
  module Sarif_exception :
    sig
      type t = {
        kind : string;
        message : string;
        stack : Sarif.Stack.t;
        innerExceptions : Sarif.Sarif_exception.t list;
      }
      val to_yojson : Sarif.Sarif_exception.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Sarif_exception.t Ppx_deriving_yojson_runtime.error_or
      val default : Sarif.Sarif_exception.t
    end
  module Notification_kind :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val note : t
      val warning : t
      val error : t
    end
  module Notification :
    sig
      type t = {
        id : string;
        ruleId : string;
        physicalLocation : Sarif.PhysicalLocation.t;
        message : Sarif.Message.t;
        level : Sarif.Notification_kind.t;
        threadId : int;
        time : string;
        exn : Sarif.Sarif_exception.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Notification.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Notification.t Ppx_deriving_yojson_runtime.error_or
    end
  module Driver :
    sig
      type t = {
        name : string;
        fullName : string;
        version : string;
        semanticVersion : string;
        fileVersion : string;
        downloadUri : string;
        informationUri : string;
        sarifLoggerVersion : string;
        language : string;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Driver.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Driver.t Ppx_deriving_yojson_runtime.error_or
      val create :
        name:string ->
        ?fullName:string ->
        ?version:string ->
        ?semanticVersion:string ->
        ?fileVersion:string ->
        ?downloadUri:string ->
        ?informationUri:string ->
        ?sarifLoggerVersion:string ->
        ?language:string ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.Driver.t
      val default : Sarif.Driver.t
    end
  module Tool :
    sig
      type t = { driver : Sarif.Driver.t; }
      val to_yojson : Sarif.Tool.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Tool.t Ppx_deriving_yojson_runtime.error_or
      val create : Sarif.Driver.t -> Sarif.Tool.t
      val default : Sarif.Tool.t
    end
  module Invocation :
    sig
      type t = {
        commandLine : string;
        arguments : string list;
        responseFiles : Sarif.ArtifactLocation.t list;
        attachments : Sarif.Attachment.t list;
        startTime : string;
        endTime : string;
        exitCode : int;
        toolNotifications : Sarif.Notification.t list;
        configurationNotifications : Sarif.Notification.t list;
        exitCodeDescription : string;
        exitSignalName : string;
        exitSignalNumber : int;
        processStartFailureMessage : string;
        executionSuccessful : bool;
        machine : string;
        account : string;
        processId : int;
        executableLocation : Sarif.ArtifactLocation.t;
        workingDirectory : Sarif.ArtifactLocation.t;
        environmentVariables : Sarif.Additional_properties.t;
        stdin : Sarif.ArtifactLocation.t;
        stdout : Sarif.ArtifactLocation.t;
        stderr : Sarif.ArtifactLocation.t;
        stdoutStderr : Sarif.ArtifactLocation.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Invocation.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Invocation.t Ppx_deriving_yojson_runtime.error_or
      val create :
        commandLine:string ->
        ?arguments:string list ->
        ?responseFiles:Sarif.ArtifactLocation.t list ->
        ?attachments:Sarif.Attachment.t list ->
        ?startTime:string ->
        ?endTime:string ->
        ?exitCode:int ->
        ?toolNotifications:Sarif.Notification.t list ->
        ?configurationNotifications:Sarif.Notification.t list ->
        ?exitCodeDescription:string ->
        ?exitSignalName:string ->
        ?exitSignalNumber:int ->
        ?processStartFailureMessage:string ->
        ?executionSuccessful:bool ->
        ?machine:string ->
        ?account:string ->
        ?processId:int ->
        ?executableLocation:Sarif.ArtifactLocation.t ->
        ?workingDirectory:Sarif.ArtifactLocation.t ->
        ?environmentVariables:Sarif.Additional_properties.t ->
        ?stdin:Sarif.ArtifactLocation.t ->
        ?stdout:Sarif.ArtifactLocation.t ->
        ?stderr:Sarif.ArtifactLocation.t ->
        ?stdoutStderr:Sarif.ArtifactLocation.t ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.Invocation.t
      val default : Sarif.Invocation.t
    end
  module Conversion :
    sig
      type t = {
        tool : Sarif.Tool.t;
        invocation : Sarif.Invocation.t;
        analysisToolLogFiles : Sarif.ArtifactLocation.t;
      }
      val to_yojson : Sarif.Conversion.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Conversion.t Ppx_deriving_yojson_runtime.error_or
      val default : Sarif.Conversion.t
    end
  module Edge :
    sig
      type t = {
        id : string;
        label : Sarif.Message.t;
        sourceNodeId : string;
        targetNodeId : string;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Edge.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Edge.t Ppx_deriving_yojson_runtime.error_or
    end
  module Node :
    sig
      type t = {
        id : string;
        label : string;
        location : Sarif.Location.t;
        children : Sarif.Node.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Node.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Node.t Ppx_deriving_yojson_runtime.error_or
    end
  module Edge_traversal :
    sig
      type t = {
        edgeId : string;
        message : Sarif.Message.t;
        finalState : Sarif.Additional_properties.t;
        stepOverEdgeCount : int;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Edge_traversal.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Edge_traversal.t Ppx_deriving_yojson_runtime.error_or
    end
  module Role :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val analysisTarget : t
      val attachment : t
      val responseFile : t
      val resultFile : t
      val standardStream : t
      val traceFile : t
      val unmodifiedFile : t
      val modifiedFile : t
      val addedFile : t
      val deletedFile : t
      val renamedFile : t
      val uncontrolledFile : t
    end
  module Hash :
    sig
      type t = { value : string; algorithm : string; }
      val to_yojson : Sarif.Hash.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Hash.t Ppx_deriving_yojson_runtime.error_or
    end
  module Graph :
    sig
      type t = {
        id : string;
        description : Sarif.Message.t;
        nodes : Sarif.Node.t list;
        edges : Sarif.Edge.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Graph.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Graph.t Ppx_deriving_yojson_runtime.error_or
    end
  module Graph_dictionary :
    sig
      type t = Graph.t dict
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
    end
  module GraphTraversal :
    sig
      type t = {
        graphId : string;
        description : Sarif.Message.t;
        initialState : Sarif.Additional_properties.t;
        edgeTraversals : Sarif.Edge_traversal.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.GraphTraversal.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.GraphTraversal.t Ppx_deriving_yojson_runtime.error_or
    end
  module Replacement :
    sig
      type t = {
        deletedRegion : Sarif.Region.t;
        insertedContent : Sarif.ArtifactContent.t;
      }
      val to_yojson : Sarif.Replacement.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Replacement.t Ppx_deriving_yojson_runtime.error_or
    end
  module Artifact :
    sig
      type t = {
        description : Sarif.Message.t;
        location : Sarif.ArtifactLocation.t;
        parentIndex : int;
        offset : int;
        length : int;
        roles : Sarif.Role.t list;
        mimeType : string;
        contents : Sarif.ArtifactContent.t;
        encoding : string;
        sourceLanguage : string;
        hashes : Sarif.JsonStringDictionary.t;
        lastModifiedTimeUtc : string;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Artifact.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Artifact.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?description:Sarif.Message.t ->
        ?location:Sarif.ArtifactLocation.t ->
        ?parentIndex:int ->
        ?offset:int ->
        ?length:int ->
        ?roles:Sarif.Role.t list ->
        ?mimeType:string ->
        ?contents:Sarif.ArtifactContent.t ->
        ?encoding:string ->
        ?sourceLanguage:string ->
        ?hashes:Sarif.JsonStringDictionary.t ->
        ?lastModifiedTimeUtc:string ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.Artifact.t
    end
  module FileChange :
    sig
      type t = {
        artifactLocation : Sarif.ArtifactLocation.t;
        replacements : Sarif.Replacement.t list;
      }
      val to_yojson : Sarif.FileChange.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.FileChange.t Ppx_deriving_yojson_runtime.error_or
    end
  module Fix :
    sig
      type t = {
        description : Sarif.Message.t;
        fileChanges : Sarif.FileChange.t list;
      }
      val to_yojson : Sarif.Fix.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Fix.t Ppx_deriving_yojson_runtime.error_or
    end
  module ExternalFiles :
    sig
      type t = {
        conversion : Sarif.ArtifactLocation.t;
        files : Sarif.ArtifactLocation.t;
        graphs : Sarif.ArtifactLocation.t;
        invocations : Sarif.ArtifactLocation.t list;
        logicalLocations : Sarif.ArtifactLocation.t;
        resources : Sarif.ArtifactLocation.t;
        results : Sarif.ArtifactLocation.t;
      }
      val to_yojson : Sarif.ExternalFiles.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ExternalFiles.t Ppx_deriving_yojson_runtime.error_or
    end
  module LogicalLocation :
    sig
      type t = {
        name : string;
        fullyQualifiedName : string;
        decoratedName : string;
        parentKey : string;
        kind : string;
      }
      val to_yojson : Sarif.LogicalLocation.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.LogicalLocation.t Ppx_deriving_yojson_runtime.error_or
    end
  module RuleConfigLevel :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val cl_none : t
      val cl_note : t
      val cl_warning : t
      val cl_error : t
    end
  module ReportingConfiguration :
    sig
      type t = {
        enabled : bool;
        defaultLevel : Sarif.RuleConfigLevel.t;
        rank : int;
        parameters : Sarif.Properties.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.ReportingConfiguration.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ReportingConfiguration.t Ppx_deriving_yojson_runtime.error_or
      val default : Sarif.ReportingConfiguration.t
    end
  module ToolComponentReference :
    sig
      type t = {
        name : string;
        index : int;
        guid : string;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.ToolComponentReference.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ToolComponentReference.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?name:string ->
        ?index:int ->
        ?guid:string ->
        ?properties:Sarif.Properties.t ->
        unit -> Sarif.ToolComponentReference.t
      val default : Sarif.ToolComponentReference.t
    end
  module ReportingDescriptorReference :
    sig
      type t = {
        id : string;
        index : int;
        guid : string;
        toolComponent : Sarif.ToolComponentReference.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.ReportingDescriptorReference.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ReportingDescriptorReference.t
        Ppx_deriving_yojson_runtime.error_or
      val create :
        ?id:string ->
        ?index:int ->
        ?guid:string ->
        ?toolComponent:Sarif.ToolComponentReference.t ->
        ?properties:Sarif.Properties.t ->
        unit -> Sarif.ReportingDescriptorReference.t
      val default : Sarif.ReportingDescriptorReference.t
    end
  module ReportingDescriptorRelationship :
    sig
      type t = {
        target : Sarif.ReportingDescriptorReference.t;
        kinds : string list;
        description : Sarif.Message.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson :
        Sarif.ReportingDescriptorRelationship.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ReportingDescriptorRelationship.t
        Ppx_deriving_yojson_runtime.error_or
      val create :
        target:Sarif.ReportingDescriptorReference.t ->
        ?kinds:string list ->
        ?description:Sarif.Message.t ->
        ?properties:Sarif.Properties.t ->
        unit -> Sarif.ReportingDescriptorRelationship.t
      val default : Sarif.ReportingDescriptorRelationship.t
    end
  module ReportingDescriptor :
    sig
      type t = {
        id : string;
        deprecatedIds : string list;
        guid : string;
        deprecatedGuids : string list;
        name : string;
        deprecatedNames : string list;
        shortDescription : Sarif.MultiformatMessageString.t;
        fullDescription : Sarif.MultiformatMessageString.t;
        messageStrings : Sarif.MultiformatMessageStringDictionary.t;
        defaultConfiguration : Sarif.ReportingConfiguration.t;
        helpUri : string;
        help : Sarif.MultiformatMessageString.t;
        relationships : Sarif.ReportingDescriptorRelationship.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.ReportingDescriptor.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ReportingDescriptor.t Ppx_deriving_yojson_runtime.error_or
      val create :
        id:string ->
        ?deprecatedIds:string list ->
        ?guid:string ->
        ?deprecatedGuids:string list ->
        ?name:string ->
        ?deprecatedNames:string list ->
        ?shortDescription:Sarif.MultiformatMessageString.t ->
        ?fullDescription:Sarif.MultiformatMessageString.t ->
        ?messageStrings:Sarif.MultiformatMessageStringDictionary.t ->
        ?defaultConfiguration:Sarif.ReportingConfiguration.t ->
        ?helpUri:string ->
        ?help:Sarif.MultiformatMessageString.t ->
        ?relationships:Sarif.ReportingDescriptorRelationship.t list ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.ReportingDescriptor.t
      val default : Sarif.ReportingDescriptor.t
    end
  module Result_kind :
    sig
      type t = private string
      val notApplicable : Sarif.Result_kind.t
      val pass : Sarif.Result_kind.t
      val fail : Sarif.Result_kind.t
      val review : Sarif.Result_kind.t
      val open_ : Sarif.Result_kind.t
      val informational : Sarif.Result_kind.t
      val to_yojson : Sarif.Result_kind.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> (Sarif.Result_kind.t, string) Stdlib.result
    end
  module Result_level :
    sig
      type t = private string
      val none : Sarif.Result_level.t
      val note : Sarif.Result_level.t
      val warning : Sarif.Result_level.t
      val error : Sarif.Result_level.t
      val to_yojson : Sarif.Result_level.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> (Sarif.Result_level.t, string) Stdlib.result
    end
  module Result_suppressionState :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val suppressedInSource : t
      val suppressedExternally : t
    end
  module Result_baselineState :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val bs_new : t
      val bs_existing : t
      val bs_absent : t
    end
  module Sarif_result :
    sig
      type t = {
        ruleId : string;
        kind : Sarif.Result_kind.t;
        level : Sarif.Result_level.t;
        message : Sarif.Message.t;
        analysisTarget : Sarif.ArtifactLocation.t;
        locations : Sarif.Location.t list;
        instanceGuid : string;
        correlationGuid : string;
        occurrenceCount : int;
        partialFingerprints : Sarif.Additional_properties.t;
        fingerprints : Sarif.Additional_properties.t;
        stacks : Sarif.Stack.t list;
        codeFlows : Sarif.CodeFlow.t list;
        graphs : Sarif.Graph_dictionary.t;
        graphTraversals : Sarif.GraphTraversal.t list;
        relatedLocations : Sarif.Location.t list;
        suppressionStates : Sarif.Result_suppressionState.t list;
        baselineState : Sarif.Result_baselineState.t;
        attachments : Sarif.Attachment.t list;
        workItemsUris : string list;
        conversionProvenance : Sarif.PhysicalLocation.t list;
        fixes : Sarif.Fix.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Sarif_result.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.Sarif_result.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ruleId:string ->
        ?kind:Sarif.Result_kind.t ->
        ?level:Sarif.Result_level.t ->
        ?message:Sarif.Message.t ->
        ?analysisTarget:Sarif.ArtifactLocation.t ->
        ?locations:Sarif.Location.t list ->
        ?instanceGuid:string ->
        ?correlationGuid:string ->
        ?occurrenceCount:int ->
        ?partialFingerprints:Sarif.Additional_properties.t ->
        ?fingerprints:Sarif.Additional_properties.t ->
        ?stacks:Sarif.Stack.t list ->
        ?codeFlows:Sarif.CodeFlow.t list ->
        ?graphs:Sarif.Graph_dictionary.t ->
        ?graphTraversals:Sarif.GraphTraversal.t list ->
        ?relatedLocations:Sarif.Location.t list ->
        ?suppressionStates:Sarif.Result_suppressionState.t list ->
        ?baselineState:Sarif.Result_baselineState.t ->
        ?attachments:Sarif.Attachment.t list ->
        ?workItemsUris:string list ->
        ?conversionProvenance:Sarif.PhysicalLocation.t list ->
        ?fixes:Sarif.Fix.t list ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.Sarif_result.t
    end
  module VersionControlDetails :
    sig
      type t = {
        uri : string;
        revisionId : string;
        branch : string;
        tag : string;
        timestamp : string;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.VersionControlDetails.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.VersionControlDetails.t Ppx_deriving_yojson_runtime.error_or
    end
  module ColumnKind :
    sig
      type t = private string
      val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
      val to_yojson : t -> Yojson.Safe.t
      val utf16CodeUnits : t
      val unicodeCodePoints : t
    end
  module RunAutomationDetails :
    sig
      type t = {
        description : Sarif.Message.t;
        id : string;
        guid : string;
        correlationGuid : string;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.RunAutomationDetails.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.RunAutomationDetails.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?description:Sarif.Message.t ->
        ?id:string ->
        ?guid:string ->
        ?correlationGuid:string ->
        ?properties:Sarif.Properties.t ->
        unit -> Sarif.RunAutomationDetails.t
      val default : Sarif.RunAutomationDetails.t
    end
  module ExternalPropertyFileReferences :
    sig
      type t = {
        location : Sarif.ArtifactLocation.t;
        guid : string;
        itemCount : int;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.ExternalPropertyFileReferences.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ExternalPropertyFileReferences.t
        Ppx_deriving_yojson_runtime.error_or
      val create :
        ?location:Sarif.ArtifactLocation.t ->
        ?guid:string ->
        ?itemCount:int ->
        ?properties:Sarif.Properties.t ->
        unit -> Sarif.ExternalPropertyFileReferences.t
      val default : Sarif.ExternalPropertyFileReferences.t
    end
  module TranslationMetadata :
    sig
      type t = {
        name : string;
        fullName : string;
        shortDescription : Sarif.MultiformatMessageString.t;
        fullDescription : Sarif.MultiformatMessageString.t;
        downloadUri : string;
        informationUri : string;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.TranslationMetadata.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.TranslationMetadata.t Ppx_deriving_yojson_runtime.error_or
      val create :
        name:string ->
        ?fullName:string ->
        ?shortDescription:Sarif.MultiformatMessageString.t ->
        ?fullDescription:Sarif.MultiformatMessageString.t ->
        ?downloadUri:string ->
        ?informationUri:string ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.TranslationMetadata.t
      val default : Sarif.TranslationMetadata.t
    end
  module ToolComponent :
    sig
      module Contents :
        sig
          type t = private string
          val of_yojson :
            Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
          val to_yojson : t -> Yojson.Safe.t
          val localizedData : t
          val nonLocalizedData : t
        end
      type t = {
        guid : string;
        name : string;
        organization : string;
        product : string;
        productSuite : string;
        shortDescription : Sarif.MultiformatMessageString.t;
        fullDescription : Sarif.MultiformatMessageString.t;
        fullName : string;
        version : string;
        semanticVersion : string;
        dottedQuadFileVersion : string;
        releaseDateUtc : string;
        downloadUri : string;
        informationUri : string;
        globalMessageStrings : Sarif.MultiformatMessageStringDictionary.t;
        notifications : Sarif.ReportingDescriptor.t list;
        rules : Sarif.ReportingDescriptor.t list;
        taxa : Sarif.ReportingDescriptor.t list;
        locations : Sarif.ArtifactLocation.t list;
        language : string;
        contents : Sarif.ToolComponent.Contents.t list;
        isComprehensive : bool;
        localizedDataSemanticVersion : string;
        minimumRequiredLocalizedDataSemanticVersion : string;
        associateComponent : Sarif.ToolComponentReference.t;
        translationMetadata : Sarif.TranslationMetadata.t;
        supportedTaxonomies : Sarif.ToolComponentReference.t list;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.ToolComponent.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.ToolComponent.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?guid:string ->
        name:string ->
        ?organization:string ->
        ?product:string ->
        ?productSuite:string ->
        ?shortDescription:Sarif.MultiformatMessageString.t ->
        ?fullDescription:Sarif.MultiformatMessageString.t ->
        ?fullName:string ->
        ?version:string ->
        ?semanticVersion:string ->
        ?dottedQuadFileVersion:string ->
        ?releaseDateUtc:string ->
        ?downloadUri:string ->
        ?informationUri:string ->
        ?globalMessageStrings:Sarif.MultiformatMessageStringDictionary.t ->
        ?notifications:Sarif.ReportingDescriptor.t list ->
        ?rules:Sarif.ReportingDescriptor.t list ->
        ?taxa:Sarif.ReportingDescriptor.t list ->
        ?locations:Sarif.ArtifactLocation.t list ->
        ?language:string ->
        ?contents:Sarif.ToolComponent.Contents.t list ->
        ?isComprehensive:bool ->
        ?localizedDataSemanticVersion:string ->
        ?minimumRequiredLocalizedDataSemanticVersion:string ->
        ?associateComponent:Sarif.ToolComponentReference.t ->
        ?translationMetadata:Sarif.TranslationMetadata.t ->
        ?supportedTaxonomies:Sarif.ToolComponentReference.t list ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.ToolComponent.t
      val default : Sarif.ToolComponent.t
    end
  module Address :
    sig
      type t = {
        absoluteAddress : int;
        relativeAddress : int;
        length : int;
        kind : string;
        name : string;
        fullyQualifiedName : string;
        offsetFromParent : int;
        index : int;
        parentIndex : int;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Address.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Address.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?absoluteAddress:int ->
        ?relativeAddress:int ->
        ?length:int ->
        ?kind:string ->
        ?name:string ->
        ?fullyQualifiedName:string ->
        ?offsetFromParent:int ->
        ?index:int ->
        ?parentIndex:int ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.Address.t
      val default : Sarif.Address.t
    end
  module WebRequest :
    sig
      type t = {
        index : int;
        protocol : string;
        version : string;
        target : string;
        method_ : string;
        headers : Sarif.JsonStringDictionary.t;
        parameters : Sarif.JsonStringDictionary.t;
        body : Sarif.ArtifactContent.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.WebRequest.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.WebRequest.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?index:int ->
        ?protocol:string ->
        ?version:string ->
        ?target:string ->
        ?method_:string ->
        ?headers:Sarif.JsonStringDictionary.t ->
        ?parameters:Sarif.JsonStringDictionary.t ->
        ?body:Sarif.ArtifactContent.t ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.WebRequest.t
      val default : Sarif.WebRequest.t
    end
  module WebResponse :
    sig
      type t = {
        index : int;
        protocol : string;
        version : string;
        statusCode : int;
        reasonPhrase : string;
        headers : Sarif.JsonStringDictionary.t;
        body : Sarif.ArtifactContent.t;
        noResponseReceived : bool;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.WebResponse.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.WebResponse.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?index:int ->
        ?protocol:string ->
        ?version:string ->
        ?statusCode:int ->
        ?reasonPhrase:string ->
        ?headers:Sarif.JsonStringDictionary.t ->
        ?body:Sarif.ArtifactContent.t ->
        ?noResponseReceived:bool ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.WebResponse.t
      val default : Sarif.WebResponse.t
    end
  module SpecialLocations :
    sig
      type t = {
        displayBase : Sarif.ArtifactLocation.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.SpecialLocations.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t ->
        Sarif.SpecialLocations.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?displayBase:Sarif.ArtifactLocation.t ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.SpecialLocations.t
      val default : Sarif.SpecialLocations.t
    end
  module Run :
    sig
      type t = {
        tool : Sarif.Tool.t;
        invocations : Sarif.Invocation.t list;
        conversion : Sarif.Conversion.t;
        language : string;
        versionControlProvenance : Sarif.VersionControlDetails.t list;
        originalUriBaseIds : Sarif.ArtifactLocationDictionary.t;
        artifacts : Sarif.Artifact.t list;
        logicalLocations : Sarif.LogicalLocation.t list;
        graphs : Sarif.Graph.t list;
        results : Sarif.Sarif_result.t list;
        automationDetails : Sarif.RunAutomationDetails.t;
        runAggregates : Sarif.RunAutomationDetails.t list;
        baselineGuid : string;
        redactionToken : string list;
        defaultEncoding : string;
        defaultSourceLanguage : string;
        newlineSequences : string list;
        columnKind : Sarif.ColumnKind.t;
        externalPropertyFileReferences :
          Sarif.ExternalPropertyFileReferences.t;
        threadFlowLocations : Sarif.ThreadFlowLocation.t list;
        taxonomies : Sarif.ToolComponent.t list;
        addresses : Sarif.Address.t list;
        translations : Sarif.ToolComponent.t list;
        policies : Sarif.ToolComponent.t list;
        webRequests : Sarif.WebRequest.t list;
        webResponses : Sarif.WebResponse.t list;
        specialLocations : Sarif.SpecialLocations.t;
        properties : Sarif.Properties.t;
      }
      val to_yojson : Sarif.Run.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Run.t Ppx_deriving_yojson_runtime.error_or
      val create :
        tool:Sarif.Tool.t ->
        ?invocations:Sarif.Invocation.t list ->
        ?conversion:Sarif.Conversion.t ->
        ?language:string ->
        ?versionControlProvenance:Sarif.VersionControlDetails.t list ->
        ?originalUriBaseIds:Sarif.ArtifactLocationDictionary.t ->
        ?artifacts:Sarif.Artifact.t list ->
        ?logicalLocations:Sarif.LogicalLocation.t list ->
        ?graphs:Sarif.Graph.t list ->
        ?results:Sarif.Sarif_result.t list ->
        ?automationDetails:Sarif.RunAutomationDetails.t ->
        ?runAggregates:Sarif.RunAutomationDetails.t list ->
        ?baselineGuid:string ->
        ?redactionToken:string list ->
        ?defaultEncoding:string ->
        ?defaultSourceLanguage:string ->
        ?newlineSequences:string list ->
        ?columnKind:Sarif.ColumnKind.t ->
        ?externalPropertyFileReferences:Sarif.ExternalPropertyFileReferences.t ->
        ?threadFlowLocations:Sarif.ThreadFlowLocation.t list ->
        ?taxonomies:Sarif.ToolComponent.t list ->
        ?addresses:Sarif.Address.t list ->
        ?translations:Sarif.ToolComponent.t list ->
        ?policies:Sarif.ToolComponent.t list ->
        ?webRequests:Sarif.WebRequest.t list ->
        ?webResponses:Sarif.WebResponse.t list ->
        ?specialLocations:Sarif.SpecialLocations.t ->
        ?properties:Sarif.Properties.t -> unit -> Sarif.Run.t
    end
  module Schema :
    sig
      type t = {
        schema : Sarif.Uri.t;
        version : Sarif.Version.t;
        runs : Sarif.Run.t list;
      }
      val to_yojson : Sarif.Schema.t -> Yojson.Safe.t
      val of_yojson :
        Yojson.Safe.t -> Sarif.Schema.t Ppx_deriving_yojson_runtime.error_or
      val create :
        ?schema:Sarif.Uri.t ->
        ?version:Sarif.Version.t ->
        runs:Sarif.Run.t list -> unit -> Sarif.Schema.t
    end
end