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: collection_updater.rs
    path of file: ./repos/qdrant/lib/collection/src/collection_manager
    
    the code of the file until where you have to start completion: use parking_lot::RwLock;
use segment::types::SeqNumberType;

use crate::collection_manager::holders::segment_holder::SegmentHolder;
use crate::collection_manager::segments_updater::*;
use crate::operations::types::CollectionResult;
use crate::operations::CollectionUpdateOperations;

/// Implementation of the update operation
#[derive(Default)]
pub struct CollectionUpdater {}

impl CollectionUpdater {
    pub fn new() -> Self {
        Self {}
    }

    fn handle_update_result(
        segments: &RwLock<SegmentHolder>,
        op_num: SeqNumberType,
        operation_result: &CollectionResult<usize>,
    ) {
        match operation_result {
            Ok(_) => {
            
    
    fn test_sync_ops() {
        let dir = Builder::new().prefix("segment_dir").tempdir().unwrap();

        let segments = build_test_holder(dir.path());

        let vec11 = only_default_vector(&[1.0, 1.0, 1.0, 1.0]);
        let vec12 = only_default_vector(&[1.0, 1.0, 1.0, 0.0]);
        let vec13 = only_default_vector(&[1.0, 0.0, 1.0, 1.0]);

        let points = vec![
            PointStruct {
                id: 11.into(),
                vector: vec11.into(),
                payload: None,
            },
            PointStruct {
                id: 12.into(),
                vector: vec12.into(),
                payload: None,
            },
            PointStruct {
                id: 13.into(),
                vector: vec13.into(),
                payload: Some(json!({ "color": "red" }).into()),
            },
            PointStruct {
                id: 14.into(),
                vector: vec![0., 0., 0., 0.].into(),
                payload: None,
            },
            PointStruct {
                id: 500.into(),
                vector: vec![2., 0., 2., 0.].into(),
                payload: None,
            },
        ];

        let (num_deleted, num_new, num_updated) =
            sync_points(&segments.read(), 100, Some(10.into()), None, &points).unwrap();

        assert_eq!(num_deleted, 1); // delete point 15
        assert_eq!(num_new, 1); // insert point 500
        assert_eq!(num_updated, 2); // upsert point 13 and 14 as it has updated data
                                    // points 11 and 12 are not updated as they are same as before
    }