<commit_before>/*
Copyright 2015 <NAME>, <NAME>, and <NAME>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package markets.clearing

import akka.actor.{InvalidMessageException, ActorRef, Actor}
import markets.clearing.engines.MatchingEngineLike
import markets.orders.OrderLike

import scala.util.{Failure, Success}


/** Base trait for all clearing mechanisms.
  *
  * @note A `ClearingMechanismLike` actor should receive orders and fill them using its matching engine. Filled
  *       orders are then sent to a `SettlementMechanismLike` actor for further processing.
  */
trait ClearingMechanismLike {
   this: Actor =>

  /** Each clearing mechanism has a matching engine for forming prices and quantities. */
  def matchingEngine: MatchingEngineLike

  /** The settlement mechanism used to process filled orders into successful transactions. */
  def settlementMechanism: ActorRef

  def receive: Receive = {
    case order: OrderLike =>
      val result = matchingEngine.fillIncomingOrder(order)
      result match {
        case Success(filledOrders) =>
          filledOrders.foreach(filledOrder => settlementMechanism ! filledOrder)
        case Failure(ex) =>
          order.issuer ! ex
      }
    case _ => throw new InvalidMessageException()<commit_msg>No longer throwing exception as catch all.<commit_after>/*
Copyright 2015 <NAME>, <NAME>, and <NAME>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package markets.clearing

import akka.actor.{InvalidMessageException, ActorRef, Actor}
import markets.clearing.engines.MatchingEngineLike
import markets.orders.OrderLike

import scala.util.{Failure, Success}


/** Base trait for all clearing mechanisms.
  *
  * @note A `ClearingMechanismLike` actor should receive orders and fill them using its matching engine. Filled
  *       orders are then sent to a `SettlementMechanismLike` actor for further processing.
  */
trait ClearingMechanismLike {
   this: Actor =>

  /** Each clearing mechanism has a matching engine for forming prices and quantities. */
  def matchingEngine: MatchingEngineLike

  /** The settlement mechanism used to process filled orders into successful transactions. */
  def settlementMechanism: ActorRef

  def receive: Receive = {
    case order: OrderLike =>
      val result = matchingEngine.fillIncomingOrder(order)
      result match {
        case Success(filledOrders) =>
          filledOrders.foreach(filledOrder => settlementMechanism ! filledOrder)
        case Failure(ex) =>
          order.issuer ! ex
      }
    case _ => ???
{'fraction_non_alphanumeric': 0.0705073086844368, 'fraction_numerical': 0.004585841215247922, 'mean_word_length': 3.9293785310734464, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3315324', 'n_tokens_mistral': 915, 'n_tokens_neox': 876, 'n_words': 376}