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