Browse Source
- Creating the Interface Handler class which will take care of the parsing of Natspec comments and of interfacing with and outputing to JSON files. - Will also handle the ABI interface creationcl-refactor
Lefteris Karapetsas
10 years ago
7 changed files with 205 additions and 84 deletions
@ -0,0 +1,88 @@ |
|||
#include <libsolidity/InterfaceHandler.h> |
|||
#include <libsolidity/AST.h> |
|||
#include <libsolidity/CompilerStack.h> |
|||
|
|||
namespace dev { |
|||
namespace solidity { |
|||
|
|||
InterfaceHandler::InterfaceHandler() |
|||
{ |
|||
} |
|||
|
|||
std::unique_ptr<std::string> InterfaceHandler::getDocumentation(std::shared_ptr<ContractDefinition> _contractDef, |
|||
enum documentation_type _type) |
|||
{ |
|||
switch(_type) |
|||
{ |
|||
case NATSPEC_USER: |
|||
return getUserDocumentation(_contractDef); |
|||
case NATSPEC_DEV: |
|||
return getDevDocumentation(_contractDef); |
|||
case ABI_INTERFACE: |
|||
return getABIInterface(_contractDef); |
|||
} |
|||
|
|||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Internal error")); |
|||
return nullptr; |
|||
} |
|||
|
|||
std::unique_ptr<std::string> InterfaceHandler::getABIInterface(std::shared_ptr<ContractDefinition> _contractDef) |
|||
{ |
|||
Json::Value methods(Json::arrayValue); |
|||
|
|||
std::vector<FunctionDefinition const*> exportedFunctions = _contractDef->getInterfaceFunctions(); |
|||
for (FunctionDefinition const* f: exportedFunctions) |
|||
{ |
|||
Json::Value method; |
|||
Json::Value inputs(Json::arrayValue); |
|||
Json::Value outputs(Json::arrayValue); |
|||
|
|||
auto streamVariables = [](std::vector<ASTPointer<VariableDeclaration>> const& _vars) |
|||
{ |
|||
Json::Value params(Json::arrayValue); |
|||
for (ASTPointer<VariableDeclaration> const& var: _vars) |
|||
{ |
|||
Json::Value input; |
|||
input["name"] = var->getName(); |
|||
input["type"] = var->getType()->toString(); |
|||
params.append(input); |
|||
} |
|||
return params; |
|||
}; |
|||
|
|||
method["name"] = f->getName(); |
|||
method["inputs"] = streamVariables(f->getParameters()); |
|||
method["outputs"] = streamVariables(f->getReturnParameters()); |
|||
methods.append(method); |
|||
} |
|||
return std::unique_ptr<std::string>(new std::string(m_writer.write(methods))); |
|||
} |
|||
|
|||
std::unique_ptr<std::string> InterfaceHandler::getUserDocumentation(std::shared_ptr<ContractDefinition> _contractDef) |
|||
{ |
|||
Json::Value doc; |
|||
Json::Value methods(Json::objectValue); |
|||
|
|||
for (FunctionDefinition const* f: _contractDef->getInterfaceFunctions()) |
|||
{ |
|||
Json::Value user; |
|||
auto strPtr = f->getDocumentation(); |
|||
if (strPtr) |
|||
{ |
|||
user["notice"] = Json::Value(*strPtr); |
|||
methods[f->getName()] = user; |
|||
} |
|||
} |
|||
doc["methods"] = methods; |
|||
|
|||
return std::unique_ptr<std::string>(new std::string(m_writer.write(doc))); |
|||
} |
|||
|
|||
std::unique_ptr<std::string> InterfaceHandler::getDevDocumentation(std::shared_ptr<ContractDefinition> _contractDef) |
|||
{ |
|||
//TODO
|
|||
return nullptr; |
|||
} |
|||
|
|||
} //solidity NS
|
|||
} // dev NS
|
@ -0,0 +1,74 @@ |
|||
/*
|
|||
This file is part of cpp-ethereum. |
|||
|
|||
cpp-ethereum is free software: you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation, either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
cpp-ethereum is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
/**
|
|||
* @author Lefteris <lefteris@ethdev.com> |
|||
* @date 2014 |
|||
* Takes the parsed AST and produces the Natspec |
|||
* documentation and the ABI interface |
|||
* https://github.com/ethereum/wiki/wiki/Ethereum-Natural-Specification-Format
|
|||
* |
|||
* Can generally deal with JSON files |
|||
*/ |
|||
|
|||
#pragma once |
|||
|
|||
#include <string> |
|||
#include <memory> |
|||
#include <jsonrpc/json/json.h> |
|||
|
|||
namespace dev { |
|||
namespace solidity { |
|||
|
|||
// Forward declarations
|
|||
class ContractDefinition; |
|||
enum documentation_type: unsigned short; |
|||
|
|||
class InterfaceHandler |
|||
{ |
|||
public: |
|||
InterfaceHandler(); |
|||
|
|||
/// Get the given type of documentation
|
|||
/// @param _contractDef The contract definition
|
|||
/// @param _type The type of the documentation. Can be one of the
|
|||
/// types provided by @c documentation_type
|
|||
/// @return A unique pointer contained string with the json
|
|||
/// representation of provided type
|
|||
std::unique_ptr<std::string> getDocumentation(std::shared_ptr<ContractDefinition> _contractDef, |
|||
enum documentation_type _type); |
|||
/// Get the ABI Interface of the contract
|
|||
/// @param _contractDef The contract definition
|
|||
/// @return A unique pointer contained string with the json
|
|||
/// representation of the contract's ABI Interface
|
|||
std::unique_ptr<std::string> getABIInterface(std::shared_ptr<ContractDefinition> _contractDef); |
|||
/// Get the User documentation of the contract
|
|||
/// @param _contractDef The contract definition
|
|||
/// @return A unique pointer contained string with the json
|
|||
/// representation of the contract's user documentation
|
|||
std::unique_ptr<std::string> getUserDocumentation(std::shared_ptr<ContractDefinition> _contractDef); |
|||
/// Get the Developer's documentation of the contract
|
|||
/// @param _contractDef The contract definition
|
|||
/// @return A unique pointer contained string with the json
|
|||
/// representation of the contract's developer documentation
|
|||
std::unique_ptr<std::string> getDevDocumentation(std::shared_ptr<ContractDefinition> _contractDef); |
|||
|
|||
private: |
|||
Json::StyledWriter m_writer; |
|||
}; |
|||
|
|||
} //solidity NS
|
|||
} // dev NS
|
Loading…
Reference in new issue