/*
 * Copyright 2020 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * 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.
 */

// Various utility functions for manipulating filesystem paths. Assumes that
// you're working on a *nix system where the directory separator is "/".

#ifndef THIRD_PARTY_ECCLESIA_LIB_FILE_PATH_H_
#define THIRD_PARTY_ECCLESIA_LIB_FILE_PATH_H_

#include <string>

#include "absl/strings/string_view.h"
#include "absl/types/span.h"

namespace ecclesia {

// Given a path return the basename or dirname of the path. The returned view
// will be a substring of the given path.
absl::string_view GetBasename(absl::string_view path);
absl::string_view GetDirname(absl::string_view path);

// Function that will take a sequence of paths and join them all together. This
// accepts both relative and absolute paths, but when an absolute path is passed
// in then it will "override" any arguments that came before it.
//
// We provide two overloads: one that takes a single span of string views, and
// one that takes a variadic set of string view arguments. The actual
// implemenation uses the span, but in user code being able to pass in a bunch
// of string views is very convenient in the API.
std::string JoinFilePaths(absl::Span<const absl::string_view> paths);

template <typename... Args>
std::string JoinFilePaths(absl::string_view base, Args... args) {
  // Stuff all of the arguments into a span and then call span version.
  absl::string_view paths_array[] = {base, args...};
  return JoinFilePaths(absl::MakeConstSpan(paths_array));
}

}  // namespace ecclesia

#endif  // THIRD_PARTY_ECCLESIA_LIB_FILE_PATH_H_
