blob: d97207b3717d9b805dffcb906230f3f39621796b [file] [log] [blame]
// Copyright 2015 The Bazel Authors. All rights reserved.
//
// 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.
/// Object that displays a greeting.
pub struct Greeter {
greeting: String,
}
/// Implementation of Greeter.
impl Greeter {
/// Constructs a new `Greeter`.
///
/// # Examples
///
/// ```
/// use hello_lib::greeter::Greeter;
///
/// let greeter = Greeter::new("Hello");
/// ```
pub fn new(greeting: &str) -> Greeter {
Greeter {
greeting: greeting.to_string(),
}
}
/// Constructs a new `Greeter` with greeting defined in txt file
///
/// # Examples
///
/// ```
/// use hello_lib::greeter::Greeter;
///
/// let greeter = Greeter::from_txt_file()?;
/// ```
pub fn from_txt_file() -> std::io::Result<Greeter> {
Ok(Greeter {
greeting: std::fs::read_to_string(
runfiles::Runfiles::create()?.rlocation("rules_rust/test/rust/greeting.txt"),
)?,
})
}
/// Returns the greeting as a string.
///
/// # Examples
///
/// ```
/// use hello_lib::greeter::Greeter;
///
/// let greeter = Greeter::new("Hello");
/// let greeting = greeter.greeting("World");
/// ```
pub fn greeting(&self, thing: &str) -> String {
format!("{} {}", &self.greeting, thing)
}
/// Prints the greeting.
///
/// # Examples
///
/// ```
/// use hello_lib::greeter::Greeter;
///
/// let greeter = Greeter::new("Hello");
/// greeter.greet("World");
/// ```
pub fn greet(&self, thing: &str) {
println!("{} {}", &self.greeting, thing);
}
}
#[cfg(test)]
mod test {
use super::Greeter;
#[test]
fn test_greeting() {
let hello = Greeter::new("Hi");
assert_eq!("Hi Rust", hello.greeting("Rust"));
}
#[test]
fn test_greeting_from_txt_file() {
let welcome = Greeter::from_txt_file().unwrap();
assert_eq!("Welcome Rust", welcome.greeting("Rust"));
}
}