QJsonObject JSonGeometryParser::toJSon(const GeometryPtr& geometry)
{
    QJsonObject geometryJSon;

    geometryJSon.insert(keys::geometryType, keys::typeMap.value(geometry->type()));

    if (!geometry->points().isEmpty())
    {
        geometryJSon.insert(keys::coordinates,
                            ::pointsToJSonArray(geometry->points(), geometry->type()));
    }

    if (!geometry->childGeometries().isEmpty())
    {
        QJsonArray childGeometryJSon;

        for (const GeometryPtr& childGeometry: geometry->childGeometries())
        {
            childGeometryJSon.append(JSonGeometryParser::toJSon(childGeometry));
        }
        geometryJSon.insert(keys::geometries, childGeometryJSon);
    }

    return geometryJSon;
}