1cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Copyright 2015 The Android Open Source Project 2cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 3cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Licensed under the Apache License, Version 2.0 (the "License"); 4cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// you may not use this file except in compliance with the License. 5cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// You may obtain a copy of the License at 6cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 7cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// http://www.apache.org/licenses/LICENSE-2.0 8cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 9cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Unless required by applicable law or agreed to in writing, software 10cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// distributed under the License is distributed on an "AS IS" BASIS, 11cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// See the License for the specific language governing permissions and 13cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// limitations under the License. 144f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka 154f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka#ifndef BUFFET_WEAVE_ERROR_CONVERSION_H_ 164f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka#define BUFFET_WEAVE_ERROR_CONVERSION_H_ 174f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka 184f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka#include <memory> 194f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka#include <string> 204f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka 214170585fe75d99036883229081420f2972dd4ec1Alex Vakulenko#include <brillo/errors/error.h> 224f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka#include <weave/error.h> 234f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka 244f77153a124969f9bc48a498d37c943a82a82527Vitaly Bukanamespace buffet { 254f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka 2634183c1b5b678a9726a955db9e05a361ed05eeacVitaly Bukainline void ConvertError(const weave::Error& source, 2734183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka std::unique_ptr<brillo::Error>* destination) { 2834183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka const weave::Error* inner_error = source.GetInnerError(); 294f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka if (inner_error) 304f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka ConvertError(*inner_error, destination); 314f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka 324f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka const auto& location = source.GetLocation(); 3334183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka brillo::Error::AddTo( 344f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka destination, 354f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka tracked_objects::Location{ 364f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka location.function_name.c_str(), location.file_name.c_str(), 374f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka location.line_number, tracked_objects::GetProgramCounter()}, 3834183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka "weave", source.GetCode(), source.GetMessage()); 3934183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka} 4034183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka 4134183c1b5b678a9726a955db9e05a361ed05eeacVitaly Bukainline void ConvertError(const brillo::Error& source, 4234183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka std::unique_ptr<weave::Error>* destination) { 4334183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka const brillo::Error* inner_error = source.GetInnerError(); 4434183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka if (inner_error) 4534183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka ConvertError(*inner_error, destination); 4634183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka 4734183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka const auto& location = source.GetLocation(); 4834183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka weave::Error::AddTo( 4934183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka destination, 5034183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka tracked_objects::Location{ 5134183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka location.function_name.c_str(), location.file_name.c_str(), 5234183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka location.line_number, tracked_objects::GetProgramCounter()}, 5334183c1b5b678a9726a955db9e05a361ed05eeacVitaly Buka source.GetCode(), source.GetMessage()); 544f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka} 554f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka 564f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka} // namespace buffet 574f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka 584f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka#endif // BUFFET_WEAVE_ERROR_CONVERSION_H_ 59