Sha256: c40fd27965703df85fe3d459c704dd2c7e7ca4847a1564384ef7ad1067a08e94

Contents?: true

Size: 969 Bytes

Versions: 2

Compression:

Stored size: 969 Bytes

Contents

# This is free and unencumbered software released into the public domain.

require_relative '../exporter'

require 'json'

module FFIDB::Exporters
  ##
  # Code generator for the JSON data interchange language.
  class JSON < FFIDB::Exporter
    def begin
      # No header, because JSON doesn't support comments
      @json = {}
    end

    def begin_library(library)
      @library = library
      @json[@library&.name] ||= {}
    end

    def export_symbol(symbol, **kwargs)
      @json[@library&.name][symbol.name] = {kind: symbol.kind.to_s}.merge!(symbol.to_h)
    end
    alias_method :export_typedef, :export_symbol
    alias_method :export_enum, :export_symbol
    alias_method :export_struct, :export_symbol
    alias_method :export_union, :export_symbol
    alias_method :export_function, :export_symbol

    def finish_library
      @library = nil
    end

    def finish
      puts ::JSON.pretty_generate(@json)
    end
  end # JSON
end # FFIDB::Exporters

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ffidb-0.13.0 lib/ffidb/exporters/json.rb
ffidb-0.12.0 lib/ffidb/exporters/json.rb