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: parser.rs
    path of file: ./repos/readyset/benchmarks/src/utils/prometheus/metric
    
    the code of the file until where you have to start completion: use std::convert::{TryFrom, TryInto};
use std::str::FromStr;

use futures::stream::Stream;
use nom::bytes::complete::{tag, take_while};
use nom::character::complete::{alpha1, char, space0, space1};
use nom::combinator::{all_consuming, opt, rest};
use nom::multi::separated_list0;
use nom::sequence::{delimited, preceded, terminated, tuple};
use nom::IResult;

use super::{Metric, MetricType, Sample};

/// Contains all the error conditions that can be produced by the parser
#[derive(Debug, thiserror::Error)]
pub enum Er
    
    fn line_type() {
        let line = "# TYPE controller_rpc_overall_time counter"
            .parse::<Line>()
            .unwrap();
        assert_eq!(
            line,
            Line::Type("controller_rpc_overall_time".into(), MetricType::Counter)
        );
        let line = "# TYPE controller_migration_in_progress gauge"
            .parse::<Line>()
            .unwrap();
        assert_eq!(
            line,
            Line::Type("controller_migration_in_progress".into(), MetricType::Gauge)
        );
        let line = "# TYPE packet_write_propagation_time_us summary"
            .parse::<Line>()
            .unwrap();
        assert_eq!(
            line,
            Line::Type(
                "packet_write_propagation_time_us".into(),
                MetricType::Summary
            )
        );
        let line = "# TYPE something faketype".parse::<Line>();
        assert!(matches!(line, Err(Error::InvalidMetricType(_))));
    }