This is a migration of the basic json support taken from the osv/httpserver. The routes uses the json object to return errors in a json format. This also adds json_exception which has a constructor from an exception. Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
81 lines
1.9 KiB
C++
81 lines
1.9 KiB
C++
/*
|
|
* This file is open source software, licensed to you under the terms
|
|
* of the Apache License, Version 2.0 (the "License"). See the NOTICE file
|
|
* distributed with this work for additional information regarding copyright
|
|
* ownership. You may not use this file except in compliance with the License.
|
|
*
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
/*
|
|
* Copyright 2015 Cloudius Systems
|
|
*/
|
|
|
|
#include "formatter.hh"
|
|
#include "json_elements.hh"
|
|
#include <float.h>
|
|
#include <boost/math/special_functions/fpclassify.hpp>
|
|
|
|
using namespace std;
|
|
|
|
namespace json {
|
|
|
|
sstring formatter::to_json(const sstring& str) {
|
|
return to_json(str.c_str());
|
|
}
|
|
|
|
sstring formatter::to_json(const char* str) {
|
|
sstring res = "\"";
|
|
res += str;
|
|
res += "\"";
|
|
return res;
|
|
}
|
|
|
|
sstring formatter::to_json(int n) {
|
|
return to_string(n);
|
|
}
|
|
|
|
sstring formatter::to_json(long n) {
|
|
return to_string(n);
|
|
}
|
|
|
|
sstring formatter::to_json(float f) {
|
|
int inf;
|
|
if ((inf = boost::math::isinf(f))) {
|
|
f = inf * FLT_MAX;
|
|
} else if (boost::math::isnan(f)) {
|
|
f = 0;
|
|
}
|
|
return to_string(f);
|
|
}
|
|
|
|
sstring formatter::to_json(bool b) {
|
|
return (b) ? "true" : "false";
|
|
}
|
|
|
|
sstring formatter::to_json(const date_time& d) {
|
|
char buff[50];
|
|
sstring res = "\"";
|
|
strftime(buff, 50, TIME_FORMAT, &d);
|
|
res += buff;
|
|
return res + "\"";
|
|
}
|
|
|
|
sstring formatter::to_json(const jsonable& obj) {
|
|
return obj.to_json();
|
|
}
|
|
|
|
sstring formatter::to_json(unsigned long l) {
|
|
return to_string(l);
|
|
}
|
|
|
|
}
|