better:

    rule { (FirstBytePosition ~ ch('-') ~ LastBytePosition) ~~> (Some(_, _)) | ch('*') ~ push(None) }