github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/sawtooth-core-master/families/smallbank/smallbank_rust/src/main.rs (about)

     1  /*
     2   * Copyright 2018 Intel Corporation
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   * ------------------------------------------------------------------------------
    16   */
    17  
    18  #[macro_use]
    19  extern crate clap;
    20  extern crate crypto;
    21  #[macro_use]
    22  extern crate log;
    23  extern crate log4rs;
    24  extern crate protobuf;
    25  extern crate rustc_serialize;
    26  extern crate sawtooth_sdk;
    27  
    28  mod handler;
    29  mod smallbank;
    30  
    31  use log::LogLevelFilter;
    32  use log4rs::append::console::ConsoleAppender;
    33  use log4rs::config::{Appender, Config, Root};
    34  use log4rs::encode::pattern::PatternEncoder;
    35  use std::process;
    36  
    37  use sawtooth_sdk::processor::TransactionProcessor;
    38  
    39  use handler::SmallbankTransactionHandler;
    40  
    41  fn main() {
    42      let matches = clap_app!(smallbank =>
    43          (version: crate_version!())
    44          (about: "Smallbank Transaction Processor (Rust)")
    45          (@arg connect: -C --connect +takes_value
    46           "connection endpoint for validator")
    47          (@arg verbose: -v --verbose +multiple
    48           "increase output verbosity"))
    49          .get_matches();
    50  
    51      let endpoint = matches
    52          .value_of("connect")
    53          .unwrap_or("tcp://localhost:4004");
    54  
    55      let console_log_level;
    56      match matches.occurrences_of("verbose") {
    57          0 => console_log_level = LogLevelFilter::Warn,
    58          1 => console_log_level = LogLevelFilter::Info,
    59          2 => console_log_level = LogLevelFilter::Debug,
    60          3 | _ => console_log_level = LogLevelFilter::Trace,
    61      }
    62  
    63      let stdout = ConsoleAppender::builder()
    64          .encoder(Box::new(PatternEncoder::new(
    65              "{h({l:5.5})} | {({M}:{L}):20.20} | {m}{n}",
    66          )))
    67          .build();
    68  
    69      let config = match Config::builder()
    70          .appender(Appender::builder().build("stdout", Box::new(stdout)))
    71          .build(Root::builder().appender("stdout").build(console_log_level))
    72      {
    73          Ok(x) => x,
    74          Err(_) => process::exit(1),
    75      };
    76  
    77      match log4rs::init_config(config) {
    78          Ok(_) => (),
    79          Err(_) => process::exit(1),
    80      }
    81  
    82      let handler = SmallbankTransactionHandler::new();
    83      let mut processor = TransactionProcessor::new(endpoint);
    84  
    85      info!("Console logging level: {}", console_log_level);
    86  
    87      processor.add_handler(&handler);
    88      processor.start();
    89  }