Make model entities Serializable.

To avoid cycles, every reference from a MEntity to another is replaced by a MEntityRef.

How subobjects are retrieved using the MEntityRef is the responsability of the client. Json objects can be returned as this or inflated with concrete objet rather than the refs.

TODO consider serialization module?

Introduced classes

class JsonNamespace

nitc :: JsonNamespace

Fullname representation that can be used to build decorated links
interface JsonRef

nitc :: JsonRef

Something that goes in a JsonNamespace
class MEntityRef

nitc :: MEntityRef

A reference to another mentity.

Redefined classes

redef class CatalogStats

nitc :: json_model $ CatalogStats

Catalog statistics
redef abstract class Deserializer

nitc :: json_model $ Deserializer

Abstract deserialization service
redef class Location

nitc :: json_model $ Location

A location inside a source file
redef class MAttribute

nitc :: json_model $ MAttribute

A global attribute
redef class MAttributeDef

nitc :: json_model $ MAttributeDef

A local definition of an attribute
redef class MClass

nitc :: json_model $ MClass

A named class
redef class MClassDef

nitc :: json_model $ MClassDef

A definition (an introduction or a refinement) of a class in a module
redef class MDoc

nitc :: json_model $ MDoc

Structured documentation of a MEntity object
redef abstract class MEntity

nitc :: json_model $ MEntity

A named and possibly documented entity in the model.
redef class MGroup

nitc :: json_model $ MGroup

A group of modules in a package
redef class MMethod

nitc :: json_model $ MMethod

A global method
redef class MMethodDef

nitc :: json_model $ MMethodDef

A local definition of a method
redef class MModule

nitc :: json_model $ MModule

A Nit module is usually associated with a Nit source file.
redef class MPackage

nitc :: json_model $ MPackage

A Nit package, that encompass a product
redef class MPackageMetadata

nitc :: json_model $ MPackageMetadata

The metadata extracted from a MPackage
redef class MPackageStats

nitc :: json_model $ MPackageStats

MPackage statistics for the catalog
redef class MParameter

nitc :: json_model $ MParameter

A parameter in a signature
redef class MParameterType

nitc :: json_model $ MParameterType

The type associated to a formal parameter generic type of a class
redef abstract class MPropDef

nitc :: json_model $ MPropDef

A definition of a property (local property)
redef abstract class MProperty

nitc :: json_model $ MProperty

A service (global property) that generalize method, attribute, etc.
redef class MSignature

nitc :: json_model $ MSignature

A signature of a method
redef abstract class MType

nitc :: json_model $ MType

A global static type
redef class MVirtualTypeDef

nitc :: json_model $ MVirtualTypeDef

A local definition of a virtual type
redef class MVirtualTypeProp

nitc :: json_model $ MVirtualTypeProp

A global virtual type
redef class Person

nitc :: json_model $ Person

A contributor/author/etc.
redef abstract class String

nitc :: json_model $ String

A namespace token representation

All class definitions

redef class CatalogStats

nitc :: json_model $ CatalogStats

Catalog statistics
redef abstract class Deserializer

nitc :: json_model $ Deserializer

Abstract deserialization service
class JsonNamespace

nitc $ JsonNamespace

Fullname representation that can be used to build decorated links
interface JsonRef

nitc $ JsonRef

Something that goes in a JsonNamespace
redef class Location

nitc :: json_model $ Location

A location inside a source file
redef class MAttribute

nitc :: json_model $ MAttribute

A global attribute
redef class MAttributeDef

nitc :: json_model $ MAttributeDef

A local definition of an attribute
redef class MClass

nitc :: json_model $ MClass

A named class
redef class MClassDef

nitc :: json_model $ MClassDef

A definition (an introduction or a refinement) of a class in a module
redef class MDoc

nitc :: json_model $ MDoc

Structured documentation of a MEntity object
redef abstract class MEntity

nitc :: json_model $ MEntity

A named and possibly documented entity in the model.
class MEntityRef

nitc $ MEntityRef

A reference to another mentity.
redef class MGroup

nitc :: json_model $ MGroup

A group of modules in a package
redef class MMethod

nitc :: json_model $ MMethod

A global method
redef class MMethodDef

nitc :: json_model $ MMethodDef

A local definition of a method
redef class MModule

nitc :: json_model $ MModule

A Nit module is usually associated with a Nit source file.
redef class MPackage

nitc :: json_model $ MPackage

A Nit package, that encompass a product
redef class MPackageMetadata

nitc :: json_model $ MPackageMetadata

The metadata extracted from a MPackage
redef class MPackageStats

nitc :: json_model $ MPackageStats

MPackage statistics for the catalog
redef class MParameter

nitc :: json_model $ MParameter

A parameter in a signature
redef class MParameterType

nitc :: json_model $ MParameterType

The type associated to a formal parameter generic type of a class
redef abstract class MPropDef

nitc :: json_model $ MPropDef

A definition of a property (local property)
redef abstract class MProperty

nitc :: json_model $ MProperty

A service (global property) that generalize method, attribute, etc.
redef class MSignature

nitc :: json_model $ MSignature

A signature of a method
redef abstract class MType

nitc :: json_model $ MType

A global static type
redef class MVirtualTypeDef

nitc :: json_model $ MVirtualTypeDef

A local definition of a virtual type
redef class MVirtualTypeProp

nitc :: json_model $ MVirtualTypeProp

A global virtual type
redef class Person

nitc :: json_model $ Person

A contributor/author/etc.
redef abstract class String

nitc :: json_model $ String

A namespace token representation
package_diagram nitc::json_model json_model json::serialization_write serialization_write nitc::json_model->json::serialization_write nitc::html_model html_model nitc::json_model->nitc::html_model serialization::caching caching json::serialization_write->serialization::caching nitc::model_collect model_collect nitc::html_model->nitc::model_collect nitc\>catalog\> catalog nitc::html_model->nitc\>catalog\> markdown markdown nitc::html_model->markdown nitc::htmlight htmlight nitc::html_model->nitc::htmlight html::bootstrap bootstrap nitc::html_model->html::bootstrap ...serialization::caching ... ...serialization::caching->serialization::caching ...nitc::model_collect ... ...nitc::model_collect->nitc::model_collect ...nitc\>catalog\> ... ...nitc\>catalog\>->nitc\>catalog\> ...markdown ... ...markdown->markdown ...nitc::htmlight ... ...nitc::htmlight->nitc::htmlight ...html::bootstrap ... ...html::bootstrap->html::bootstrap nitc::json_commands json_commands nitc::json_commands->nitc::json_model nitc::api_base api_base nitc::api_base->nitc::json_commands nitc::api_base... ... nitc::api_base...->nitc::api_base

Ancestors

module abstract_collection

core :: abstract_collection

Abstract collection classes and services.
module abstract_text

core :: abstract_text

Abstract class for manipulation of sequences of characters
module actors_injection_phase

nitc :: actors_injection_phase

Injects model for the classes annotated with "is actor" so
module annotation

nitc :: annotation

Management and utilities on annotations
module array

core :: array

This module introduces the standard array structure.
module astbuilder

nitc :: astbuilder

Instantiation and transformation of semantic nodes in the AST of expressions and statements
module astutil

nitc :: astutil

Additional features on Nit AST
module auto_super_init

nitc :: auto_super_init

Computing of super-constructors that must be implicitly called at the begin of constructors.
module bitset

core :: bitset

Services to handle BitSet
module bootstrap

html :: bootstrap

HTML templates for Bootstrap components.
module bytes

core :: bytes

Services for byte streams and arrays
module caching

serialization :: caching

Services for caching serialization engines
module catalog

nitc :: catalog

Basic catalog generator for Nit packages
module check_annotation

nitc :: check_annotation

Check that annotation present in the AST are either primitive or user-declared
module circular_array

core :: circular_array

Efficient data structure to access both end of the sequence.
module codec_base

core :: codec_base

Base for codecs to use with streams
module codecs

core :: codecs

Group module for all codec-related manipulations
module collection

core :: collection

This module define several collection classes.
module console

console :: console

Defines some ANSI Terminal Control Escape Sequences.
module core

core :: core

Standard classes and methods used by default by Nit programs and libraries.
module counter

counter :: counter

Simple numerical statistical analysis and presentation
module deriving

nitc :: deriving

Injection of automatic method definitions for standard methods, based on the attributes of the classes
module digraph

graph :: digraph

Implementation of directed graphs, also called digraphs.
module div_by_zero

nitc :: div_by_zero

Detection of divisions by zero in obvious cases
module engine_tools

serialization :: engine_tools

Advanced services for serialization engines
module environ

core :: environ

Access to the environment variables of the process
module error

core :: error

Standard error-management infrastructure.
module exec

core :: exec

Invocation and management of operating system sub-processes.
module file

core :: file

File manipulations (create, read, write, etc.)
module fixed_ints

core :: fixed_ints

Basic integers of fixed-precision
module fixed_ints_text

core :: fixed_ints_text

Text services to complement fixed_ints
module flat

core :: flat

All the array-based text representations
module flow

nitc :: flow

Intraprocedural static flow.
module frontend

nitc :: frontend

Collect and orchestration of main frontend phases
module gc

core :: gc

Access to the Nit internal garbage collection mechanism
module glsl_validation

nitc :: glsl_validation

Check shader code within Nit modules using the tool glslangValidator
module hash_collection

core :: hash_collection

Introduce HashMap and HashSet.
module highlight

nitc :: highlight

Highlighting of Nit AST
module html

html :: html

HTML output facilities
module htmlight

nitc :: htmlight

Highlighting of Nit AST with HTML
module i18n_phase

nitc :: i18n_phase

Basic support of internationalization through the generation of id-to-string tables
module ini

ini :: ini

Read and write INI configuration files
module inspect

serialization :: inspect

Refine Serializable::inspect to show more useful information
module iso8859_1

core :: iso8859_1

Codec for ISO8859-1 I/O
module kernel

core :: kernel

Most basic classes and methods.
module lexer

nitc :: lexer

Lexer and its tokens.
module lexer_work

nitc :: lexer_work

Internal algorithm and data structures for the Nit lexer
module list

core :: list

This module handle double linked lists
module literal

nitc :: literal

Parsing of literal values in the abstract syntax tree.
module loader

nitc :: loader

Loading of Nit source files
module local_var_init

nitc :: local_var_init

Verify that local variables are initialized before their usage
module location

nitc :: location

Nit source-file and locations in source-file
module markdown

markdown :: markdown

Markdown parsing.
module math

core :: math

Mathematical operations
module md5

md5 :: md5

Native MD5 digest implementation as Text::md5
module mdoc

nitc :: mdoc

Documentation of model entities
module meta

meta :: meta

Simple user-defined meta-level to manipulate types of instances as object.
module mmodule

nitc :: mmodule

modules and module hierarchies in the metamodel
module mmodule_data

nitc :: mmodule_data

Define and retrieve data in modules
module model

nitc :: model

Classes, types and properties
module model_base

nitc :: model_base

The abstract concept of model and related common things
module model_collect

nitc :: model_collect

Collect things from the model.
module model_examples

nitc :: model_examples

Examples for Model entities
module modelbuilder_base

nitc :: modelbuilder_base

Load nit source files and build the associated model
module modelize

nitc :: modelize

Create a model from nit source files
module modelize_class

nitc :: modelize_class

Analysis and verification of class definitions to instantiate model element
module modelize_property

nitc :: modelize_property

Analysis and verification of property definitions to instantiate model element
module more_collections

more_collections :: more_collections

Highly specific, but useful, collections-related classes.
module mpackage

nitc :: mpackage

Modelisation of a Nit package
module native

core :: native

Native structures for text and bytes
module nitpm_shared

nitc :: nitpm_shared

Services related to the Nit package manager
module no_warning

nitc :: no_warning

Fill toolcontext information about blacklisting of warnings.
module numeric

core :: numeric

Advanced services for Numeric types
module opts

opts :: opts

Management of options on the command line
module ordered_tree

ordered_tree :: ordered_tree

Manipulation and presentation of ordered trees.
module parallelization_phase

nitc :: parallelization_phase

Phase generating threads for functions annotated with threaded annotation
module parse_annotations

nitc :: parse_annotations

Simple annotation parsing
module parser

nitc :: parser

Parser.
module parser_nodes

nitc :: parser_nodes

AST nodes of the Nit language
module parser_prod

nitc :: parser_prod

Production AST nodes full definition.
module parser_util

nitc :: parser_util

Utils and tools related to parsers and AST
module parser_work

nitc :: parser_work

Internal algorithm and data structures for the Nit parser
module phase

nitc :: phase

Phases of the processing of nit programs
module pipeline

pipeline :: pipeline

Pipelined filters and operations on iterators.
module poset

poset :: poset

Pre order sets and partial order set (ie hierarchies)
module protocol

core :: protocol

module queue

core :: queue

Queuing data structures and wrappers
module range

core :: range

Module for range of discrete objects.
module re

core :: re

Regular expression support for all services based on Pattern
module regex_phase

nitc :: regex_phase

Check for error in regular expressions from string literals
module ropes

core :: ropes

Tree-based representation of a String.
module scope

nitc :: scope

Identification and scoping of local variables and labels.
module semantize

nitc :: semantize

Process bodies of methods in regard with the model.
module serialization

serialization :: serialization

General serialization services
module serialization_core

serialization :: serialization_core

Abstract services to serialize Nit objects to different formats
module serialization_model_phase

nitc :: serialization_model_phase

Phase generating methods (model-only) to serialize Nit objects
module simple_misc_analysis

nitc :: simple_misc_analysis

Simple vavious processing on a AST
module sorter

core :: sorter

This module contains classes used to compare things and sorts arrays.
module stream

core :: stream

Input and output streams of characters
module tables

nitc :: tables

Module that interfaces the parsing tables.
module template

template :: template

Basic template system
module text

core :: text

All the classes and methods related to the manipulation of text entities
module time

core :: time

Management of time and dates
module toolcontext

nitc :: toolcontext

Common command-line tool infrastructure than handle options and error messages
module typing

nitc :: typing

Intraprocedural resolution of static types and OO-services
module union_find

core :: union_find

union–find algorithm using an efficient disjoint-set data structure
module utf8

core :: utf8

Codec for UTF-8 I/O
module version

nitc :: version

This file was generated by git-gen-version.sh

Parents

module html_model

nitc :: html_model

Translate mentities to html blocks.
module serialization_write

json :: serialization_write

Services to write Nit objects to JSON strings: serialize_to_json and JsonSerializer

Children

module json_commands

nitc :: json_commands

Translate command results to json

Descendants

module a_star-m

a_star-m

module api

nitc :: api

Components required to build a web server about the nit model.
module api_auth

nitc :: api_auth

module api_base

nitc :: api_base

Base classes used by nitweb.
module api_docdown

nitc :: api_docdown

Nitdoc specific Markdown format handling for Nitweb
module api_feedback

nitc :: api_feedback

Feedback related features
module api_light

nitc :: api_light

Highlight and collect messages from a piece of code
module api_model

nitc :: api_model

module nitweb

nitc :: nitweb

Runs a webserver based on nitcorn that render things from model.
# Make model entities Serializable.
#
# To avoid cycles, every reference from a MEntity to another is replaced by a
# MEntityRef.
#
# How subobjects are retrieved using the MEntityRef is the responsability of the
# client. Json objects can be returned as this or inflated with concrete objet
# rather than the refs.
#
# TODO consider serialization module?
module json_model

import model::model_collect
import json::serialization_write
import catalog

import html_model

redef class MEntity
	serialize

	private fun core_serialize_base(v: Serializer) do
		v.serialize_attribute("name", name)
		var mdoc = mdoc_or_fallback
		if mdoc != null then
			v.serialize_attribute("synopsis", mdoc.synopsis)
		end
	end

	redef fun core_serialize_to(v) do
		core_serialize_base(v)

		v.serialize_attribute("namespace", json_namespace)
		v.serialize_attribute("class_name", class_name)
		v.serialize_attribute("full_name", full_name)
		v.serialize_attribute("visibility", visibility.to_s)
		var mdoc = mdoc_or_fallback
		if mdoc != null then
			v.serialize_attribute("html_synopsis", mdoc.html_synopsis.write_to_string)
		end

		var modifiers = collect_modifiers
		if modifiers.not_empty then
			v.serialize_attribute("modifiers", modifiers)
		end
	end

	# Return `self.full_name` as an object that can be serialized to json.
	fun json_namespace: JsonNamespace is abstract

	# Return a new MEntityRef to `self`.
	fun to_json_ref: MEntityRef do return new MEntityRef(self)
end

redef class MDoc
	serialize

	redef fun core_serialize_to(v) do
		var doc = html_documentation.write_to_string.trim
		if not doc.is_empty then
			v.serialize_attribute("html_documentation", doc)
		end
	end
end

redef class nitc::Location
	serialize

	redef fun core_serialize_to(v) do
		v.serialize_attribute("column_end", column_end)
		v.serialize_attribute("column_start", column_start)
		v.serialize_attribute("line_end", line_end)
		v.serialize_attribute("line_start", line_start)
		var file = self.file
		if file != null then
			v.serialize_attribute("file", file.filename)
		end
	end
end

redef class MPackage
	redef fun core_serialize_to(v) do
		super

		var metadata = self.metadata
		if metadata.license != null then
			v.serialize_attribute("license", metadata.license)
		end
		if metadata.maintainers.not_empty then
			v.serialize_attribute("maintainer", metadata.maintainers.first)
		end
		if metadata.tags.not_empty then
			v.serialize_attribute("tags", metadata.tags)
		end
	end

	redef fun json_namespace do
		var ns = new JsonNamespace
		ns.add to_json_ref
		return ns
	end
end

redef class MGroup
	redef fun json_namespace do
		var ns = new JsonNamespace
		if parent != null then
			ns.prepend parent.as(not null).json_namespace
		end
		ns.add to_json_ref
		ns.add ">"
		return ns
	end
end

redef class MModule
	redef fun json_namespace do
		var ns = new JsonNamespace
		if mgroup != null then
			ns.add_all mgroup.as(not null).mpackage.json_namespace
			ns.add "::"
		end
		ns.add to_json_ref
		return ns
	end

	private fun ns_for(visibility: MVisibility): JsonNamespace do
		if visibility <= private_visibility then return json_namespace
		var mgroup = self.mgroup
		if mgroup == null then return json_namespace
		return mgroup.mpackage.json_namespace
	end
end

redef class MClass
	redef fun core_serialize_to(v) do
		super

		if mparameters.not_empty then
			v.serialize_attribute("mparameters", mparameters)
		end
	end

	redef fun json_namespace do
		var ns = new JsonNamespace
		ns.add_all intro_mmodule.ns_for(visibility)
		ns.add "::"
		ns.add to_json_ref
		return ns
	end
end

redef class MClassDef
	redef fun core_serialize_to(v) do
		super
		if is_intro then
			v.serialize_attribute("is_intro", true)
		end
		if mclass.mparameters.not_empty then
			v.serialize_attribute("mparameters", mclass.mparameters)
		end
	end

	redef fun json_namespace do
		var ns = new JsonNamespace
		if is_intro then
			ns.add_all mmodule.ns_for(mclass.visibility)
			ns.add "$"
			ns.add mclass.to_json_ref
		else if mclass.intro_mmodule.mpackage != mmodule.mpackage then
			ns.add_all mmodule.json_namespace
			ns.add "$"
			ns.add_all mclass.json_namespace
		else if mclass.visibility > private_visibility then
			ns.add_all mmodule.json_namespace
			ns.add "$"
			ns.add mclass.to_json_ref
		else
			ns.add_all mmodule.json_namespace
			ns.add "$::"
			ns.add mclass.intro_mmodule.to_json_ref
			ns.add "::"
			ns.add mclass.to_json_ref
		end
		return ns
	end
end

redef class MProperty
	redef fun json_namespace do
		var ns = new JsonNamespace
		if intro_mclassdef.is_intro then
			ns.add_all intro_mclassdef.mmodule.ns_for(visibility)
			ns.add "::"
			ns.add intro_mclassdef.mclass.to_json_ref
			ns.add "::"
			ns.add to_json_ref
		else
			ns.add_all intro_mclassdef.mmodule.json_namespace
			ns.add "::"
			ns.add intro_mclassdef.mclass.to_json_ref
			ns.add "::"
			ns.add to_json_ref
		end
		return ns
	end
end

redef class MMethod
	redef fun core_serialize_to(v) do
		super
		if is_init then
			v.serialize_attribute("is_init", true)
		end
		v.serialize_attribute("msignature", intro.msignature)
	end
end

redef class MAttribute
	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("static_mtype", intro.static_mtype)
	end
end

redef class MVirtualTypeProp
	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("bound", intro.bound)
	end
end

redef class MPropDef
	redef fun core_serialize_to(v) do
		super
		if is_intro then
			v.serialize_attribute("is_intro", true)
		end
	end

	redef fun json_namespace do
		var res = new JsonNamespace
		res.add_all mclassdef.json_namespace
		res.add "$"

		if mclassdef.mclass == mproperty.intro_mclassdef.mclass then
			res.add to_json_ref
		else
			if mclassdef.mmodule.mpackage != mproperty.intro_mclassdef.mmodule.mpackage then
				res.add_all mproperty.intro_mclassdef.mmodule.ns_for(mproperty.visibility)
				res.add "::"
			else if mproperty.visibility <= private_visibility then
				if mclassdef.mmodule.namespace_for(mclassdef.mclass.visibility) != mproperty.intro_mclassdef.mmodule.mpackage then
					res.add "::"
					res.add mproperty.intro_mclassdef.mmodule.to_json_ref
					res.add "::"
				end
			end
			if mclassdef.mclass != mproperty.intro_mclassdef.mclass then
				res.add mproperty.intro_mclassdef.to_json_ref
				res.add "::"
			end
			res.add to_json_ref
		end
		return res
	end
end

redef class MMethodDef
	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("msignature", msignature)
	end
end

redef class MAttributeDef
	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("static_mtype", static_mtype)
	end
end

redef class MVirtualTypeDef
	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("bound", bound)
	end
end

redef class MType
	redef fun core_serialize_to(v) do
		v.serialize_attribute("name", name)

		var mdoc = mdoc_or_fallback
		if mdoc != null then
			v.serialize_attribute("synopsis", mdoc.synopsis)
			v.serialize_attribute("html_synopsis", mdoc.html_synopsis.write_to_string)
		end
	end
end


redef class MSignature
	redef fun core_serialize_to(v) do
		v.serialize_attribute("arity", arity)
		v.serialize_attribute("mparameters", mparameters)
		v.serialize_attribute("return_mtype", return_mtype)
	end
end

redef class MParameterType
	redef fun core_serialize_to(v) do
		v.serialize_attribute("name", name)
		v.serialize_attribute("mtype", mclass.intro.bound_mtype.arguments[rank])
	end
end

redef class MParameter
	redef fun core_serialize_to(v) do
		v.serialize_attribute("is_vararg", is_vararg)
		v.serialize_attribute("name", name)
		v.serialize_attribute("mtype", mtype)
	end
end

# Fullname representation that can be used to build decorated links
#
# * MPackage: `mpackage_name`
# * MGroup: `(mpackage_name::)mgroup_name`
class JsonNamespace
	super Array[nullable JsonRef]
	serialize

	redef fun to_s do return self.join("")
	redef fun serialize_to(v) do to_a.serialize_to(v)
end

# Something that goes in a JsonNamespace
#
# Can be either:
# * a `RefToken` for tokens like `::`, `>` and `$`
# * a `MEntityRef` for references to mentities
interface JsonRef
	super Serializable
end

# A reference to another mentity.
class MEntityRef
	super JsonRef

	# MEntity to link to.
	var mentity: MEntity

	redef fun core_serialize_to(v) do
		mentity.core_serialize_base(v)
	end
end

# A namespace token representation
#
# Used for namespace tokens like `::`, `>` and `$`
redef class String
	super JsonRef
end

# Catalog

redef class MPackageMetadata
	serialize

	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("license", license)
		v.serialize_attribute("maintainers", maintainers)
		v.serialize_attribute("contributors", contributors)
		v.serialize_attribute("tags", tags)
		v.serialize_attribute("tryit", tryit)
		v.serialize_attribute("apk", apk)
		v.serialize_attribute("homepage", homepage)
		v.serialize_attribute("browse", browse)
		v.serialize_attribute("git", git)
		v.serialize_attribute("issues", issues)
		v.serialize_attribute("first_date", first_date)
		v.serialize_attribute("last_date", last_date)
	end
end

# Catalog statistics
redef class CatalogStats
	serialize

	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("packages", packages)
		v.serialize_attribute("maintainers", maintainers)
		v.serialize_attribute("contributors", contributors)
		v.serialize_attribute("tags", tags)
		v.serialize_attribute("modules", modules)
		v.serialize_attribute("classes", classes)
		v.serialize_attribute("methods", methods)
		v.serialize_attribute("loc", loc)
	end
end

# MPackage statistics for the catalog
redef class MPackageStats
	serialize

	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("mmodules", mmodules)
		v.serialize_attribute("mclasses", mclasses)
		v.serialize_attribute("mmethods", mmethods)
		v.serialize_attribute("loc", loc)
		v.serialize_attribute("errors", errors)
		v.serialize_attribute("warnings", warnings)
		v.serialize_attribute("warnings_per_kloc", warnings_per_kloc)
		v.serialize_attribute("documentation_score", documentation_score)
		v.serialize_attribute("commits", commits)
		v.serialize_attribute("score", score)
	end
end

redef class Person
	serialize

	redef fun core_serialize_to(v) do
		super
		v.serialize_attribute("name", name)
		v.serialize_attribute("email", email)
		v.serialize_attribute("gravatar", gravatar)
	end
end

src/doc/templates/json_model.nit:15,1--447,3