message: Make join.rs join function more readable,
  Replace tuple to internal struct "Item".
  Make the code more explicit, clear to understand
diff: @@ -141,11 +141,32 @@ fn join<'a, T: 'static + Debug>(
  match operator {
  JoinOperator::Join | JoinOperator::InnerJoin => Box::new(rows),
  - JoinOperator::LeftJoin | JoinOperator::LeftOuterJoin => Box::new(
  - rows.map(|row| row.map(|blend_context| (false, blend_context)))
  - .chain(Some(Ok((true, init_context))).into_iter())
  + JoinOperator::LeftJoin | JoinOperator::LeftOuterJoin => {
  + struct Item<'a, T: 'static + Debug> {
  + is_last: bool,
  + blend_context: Rc<BlendContext<'a, T>>,
  + }
  +
  + let rows = rows
  + .map(|row| {
  + row.map(|blend_context| Item {
  + is_last: false,
  + blend_context,
  + })
  + })
  + .chain({
  + let item = Item {
  + is_last: true,
  + blend_context: init_context,
  + };
  +
  + Some(Ok(item)).into_iter()
  + })
  .scan(true, move |is_empty, item| {
  - let (is_last, blend_context) = try_some!(item);
  + let Item {
  + is_last,
  + blend_context,
  + } = try_some!(item);
  match (is_last, &is_empty) {
  (false, true) => {
  @@ -156,8 +177,10 @@ fn join<'a, T: 'static + Debug>(
  (true, true) | (false, false) => Some(Ok(blend_context)),
  (true, false) => None,
  }
  - }),
  - ),
  + });
  +
  + Box::new(rows)
  + }
  _ => Join::err(JoinError::JoinTypeNotSupported.into()),
  }
  }
  