| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // Copyright 2015 The go-ethereum Authors | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // This file is part of the go-ethereum library. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-23 18:35:11 +02:00
										 |  |  | // The go-ethereum library is free software: you can redistribute it and/or modify | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // it under the terms of the GNU Lesser General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // The go-ethereum library is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-16 14:59:39 +02:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"encoding/json" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/rpc/shared" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DbArgs struct { | 
					
						
							|  |  |  | 	Database string | 
					
						
							|  |  |  | 	Key      string | 
					
						
							|  |  |  | 	Value    []byte | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *DbArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var objstr string | 
					
						
							|  |  |  | 	var ok bool | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[0].(string); !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("database", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Database = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[1].(string); !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("key", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Key = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 2 { | 
					
						
							|  |  |  | 		objstr, ok = obj[2].(string) | 
					
						
							|  |  |  | 		if !ok { | 
					
						
							|  |  |  | 			return shared.NewInvalidTypeError("value", "not a string") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		args.Value = []byte(objstr) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *DbArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(a.Database) == 0 { | 
					
						
							|  |  |  | 		return shared.NewValidationError("Database", "cannot be blank") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if len(a.Key) == 0 { | 
					
						
							|  |  |  | 		return shared.NewValidationError("Key", "cannot be blank") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DbHexArgs struct { | 
					
						
							|  |  |  | 	Database string | 
					
						
							|  |  |  | 	Key      string | 
					
						
							|  |  |  | 	Value    []byte | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (args *DbHexArgs) UnmarshalJSON(b []byte) (err error) { | 
					
						
							|  |  |  | 	var obj []interface{} | 
					
						
							|  |  |  | 	if err := json.Unmarshal(b, &obj); err != nil { | 
					
						
							|  |  |  | 		return shared.NewDecodeParamError(err.Error()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) < 2 { | 
					
						
							|  |  |  | 		return shared.NewInsufficientParamsError(len(obj), 2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var objstr string | 
					
						
							|  |  |  | 	var ok bool | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[0].(string); !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("database", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Database = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if objstr, ok = obj[1].(string); !ok { | 
					
						
							|  |  |  | 		return shared.NewInvalidTypeError("key", "not a string") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args.Key = objstr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(obj) > 2 { | 
					
						
							|  |  |  | 		objstr, ok = obj[2].(string) | 
					
						
							|  |  |  | 		if !ok { | 
					
						
							|  |  |  | 			return shared.NewInvalidTypeError("value", "not a string") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		args.Value = common.FromHex(objstr) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a *DbHexArgs) requirements() error { | 
					
						
							|  |  |  | 	if len(a.Database) == 0 { | 
					
						
							|  |  |  | 		return shared.NewValidationError("Database", "cannot be blank") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if len(a.Key) == 0 { | 
					
						
							|  |  |  | 		return shared.NewValidationError("Key", "cannot be blank") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } |