You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: helpers.rs
    path of file: ./repos/dprint/crates/core/src/formatting/ir_helpers
    
    the code of the file until where you have to start completion: use std::rc::Rc;

use crate::formatting::actions;
use crate::formatting::condition_helpers;

use super::super::conditions;
use super::super::print_items::*;

pub fn surround_with_new_lines(item: PrintItems) -> PrintItems {
  if item.is_empty() {
    return item;
  }

  let m
    
pub fn surround_with_newlines_indented_if_multi_line(inner_items: PrintItems, indent_width: u8) -> PrintItems {
  if inner_items.is_empty() {
    return inner_items;
  }

  let mut items = PrintItems::new();
  let start_name = "surroundWithNewLinesIndentedIfMultiLineStart";
  let start_ln = LineNumber::new(start_name);
  let end_ln = LineNumber::new("surroundWithNewLinesIndentedIfMultiLineEnd");
  let inner_items = inner_items.into_rc_path();

  items.push_info(start_ln);
  items.push_anchor(LineNumberAnchor::new(end_ln));
  items.extend(actions::if_column_number_changes(move |context| {
    context.clear_info(end_ln);
  }));
  let mut condition = Condition::new(
    "newlineIfMultiLine",
    ConditionProperties {
      true_path: Some(surround_with_new_lines(with_indent(inner_items.into()))),
      false_path: Some({
        let mut items = PrintItems::new();
        items.push_condition(conditions::if_above_width(indent_width, Signal::PossibleNewLine.into()));
        items.extend(inner_items.into());
        items
      }),
      condition: Rc::new(move |context| condition_helpers::is_multiple_lines(context, start_ln, end_ln)),
    },
  );
  let condition_reevaluation = condition.create_reevaluation();
  items.push_condition(condition);
  items.push_info(end_ln);
  items.push_reevaluation(condition_reevaluation);

  items
}